ConfidentialClientApplication Classe

O mesmo que <xref:ClientApplication.__init__>, exceto que o allow_broker parâmetro deve permanecer None.

Crie uma instância do aplicativo.

Construtor

ConfidentialClientApplication(client_id, client_credential=None, authority=None, validate_authority=True, token_cache=None, http_client=None, verify=True, proxies=None, timeout=None, client_claims=None, app_name=None, app_version=None, client_capabilities=None, azure_region=None, exclude_scopes=None, http_cache=None, instance_discovery=None, allow_broker=None, enable_pii_log=None, oidc_authority=None)

Parâmetros

Nome Description
client_id
Obrigatório
str

Seu aplicativo tem um client_id depois de registrá-lo no centro de administração do Microsoft Entra.

client_credential

Para PublicClientApplication, você usa Nenhum aqui.

Para ConfidentialClientApplication, ele dá suporte a muitos formatos de entrada diferentes para cenários diferentes.

Suporte ao uso de um segredo do cliente. Basta alimentar em uma cadeia de caracteres, como "your client secret".

Suporte ao uso de um certificado no formato X.509 (.pem)Deprecated porque ele usa a impressão digital SHA-1,

a menos que você ainda esteja usando o ADFS que dá suporte apenas à impressão digital SHA-1. Use a opção .pfx documentada posteriormente nesta página. Feed em um ditado neste formulário:


   {
       "private_key": "...-----BEGIN PRIVATE KEY-----... in PEM format",
       "thumbprint": "An SHA-1 thumbprint such as A1B2C3D4E5F6..."
           "Changed in version 1.35.0, if thumbprint is absent"
           "and a public_certificate is present, MSAL will"
           "automatically calculate an SHA-256 thumbprint instead.",
       "passphrase": "Needed if the private_key is encrypted (Added in version 1.6.0)",
       "public_certificate": "...-----BEGIN CERTIFICATE-----...",  # Needed if you use Subject Name/Issuer auth. Added in version 0.5.0.
   }

O Python MSAL requer um "private_key" no formato PEM. Se o certificado estiver no formato PKCS12 (.pfx), você poderá convertê-lo no formato X.509 (.pem) por openssl pkcs12 -in file.pfx -out file.pem -nodes. A impressão digital está disponível no registro do aplicativo no portal do Azure. Como alternativa, você pode calcular a impressão digital. public_certificate (opcional) é um certificado de chave pública que será enviado por meio do cabeçalho JWT 'x5c'. Isso é útil quando você usa o Nome da Entidade/Autenticação do Emissor , que é uma abordagem para permitir uma rotação de certificado mais fácil. Por especificações, "o certificado que contém a chave pública correspondente à chave usada para assinar digitalmente o JWS DEVE ser o primeiro certificado. Isso pode ser seguido por certificados adicionais, com cada certificado subsequente sendo o usado para certificar o anterior." No entanto, o emissor do certificado pode usar uma ordem diferente. Portanto, se sua tentativa acabar com um erro AADSTS700027 - "O valor de assinatura fornecido não correspondeu ao valor de assinatura esperado", você poderá tentar usar apenas o certificado folha (no formato PEM/str).

Suporte à declaração bruta obtida de outro lugaradicionado na versão 1.13.0:

Também pode ser uma afirmação completamente pré-assinada que você mesmo montou. Basta passar um contêiner contendo apenas a chave "client_assertion", desta forma:


   {
       "client_assertion": "...a JWT with claims aud, exp, iss, jti, nbf, and sub..."
   }

Suporte à leitura de certificados de cliente de arquivos PFX Esse uso usará automaticamente a impressão digital SHA-256 do certificado. Adicionado na versão 1.29.0:

Feed em um dicionário que contém o caminho para um arquivo PFX:


   {
       "private_key_pfx_path": "/path/to/your.pfx",  # Added in version 1.29.0
       "public_certificate": True,  # Only needed if you use Subject Name/Issuer auth. Added in version 1.30.0
       "passphrase": "Passphrase if the private_key is encrypted (Optional)",
   }

O comando a seguir gerará um arquivo .pfx de seu arquivo .key e .pem:


   openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.pem

Nome da Entidade/Autenticação do Emissor é uma abordagem para permitir uma rotação de certificado mais fácil. Se o arquivo .pfx contiver a chave privada e o certificado público, você poderá optar pelo Nome da Entidade/Autenticação do Emissor definindo "public_certificate" como True.

Valor padrão: None
client_claims

Adicionado na versão 0.5.0: é um dicionário de declarações extras que seriam assinadas por essa ConfidentialClientApplication chave privada. Por exemplo, você pode usar {"client_ip": "x.x.x.x"}. Você também pode substituir qualquer uma das seguintes declarações padrão:


   {
       "aud": the_token_endpoint,
       "iss": self.client_id,
       "sub": same_as_issuer,
       "exp": now + 10_min,
       "iat": now,
       "jti": a_random_uuid
   }
Valor padrão: None
authority
str

Uma URL que identifica uma autoridade de token. Deve ser do formato https://login.microsoftonline.com/your_tenant Por padrão, usaremos https://login.microsoftonline.com/common

Alterado na versão 1.17: você também pode usar a constante predefinida e um construtor como este:


   from msal.authority import (
       AuthorityBuilder,
       AZURE_US_GOVERNMENT, AZURE_CHINA, AZURE_PUBLIC)
   my_authority = AuthorityBuilder(AZURE_PUBLIC, "contoso.onmicrosoft.com")
   # Now you get an equivalent of
   # "https://login.microsoftonline.com/contoso.onmicrosoft.com"

   # You can feed such an authority to msal's ClientApplication
   from msal import PublicClientApplication
   app = PublicClientApplication("my_client_id", authority=my_authority, ...)
Valor padrão: None
validate_authority

(opcional) Ativa ou desativa a validação de autoridade. Esse parâmetro é padrão como true.

Valor padrão: True
token_cache

Define o cache de token usado por esta instância clientApplication. Por padrão, um cache na memória será criado e usado.

Valor padrão: None
http_client

(opcional) Sua implementação da classe abstrata HttpClient <msal.oauth2cli.http.http_client> Padrões para uma instância de sessão de solicitações. Como MSAL 1.11.0, a sessão padrão seria configurada para tentar uma nova tentativa de erro de conexão. Se você estiver fornecendo seu próprio http_client, será dever do seu http_client decidir se deseja executar novamente.

Valor padrão: None
verify

(opcional) Ele será passado para o parâmetro de verificação na biblioteca de solicitações subjacentes Isso não se aplica se você optou por passar seu próprio cliente Http

Valor padrão: True
proxies

(opcional) Ele será passado para o parâmetro proxies na biblioteca de solicitações subjacentes Isso não se aplica se você tiver escolhido passar seu próprio cliente Http

Valor padrão: None
timeout

(opcional) Ele será passado para o parâmetro de tempo limite na biblioteca de solicitações subjacentes Isso não se aplica se você optou por passar seu próprio cliente Http

Valor padrão: None
app_name

(opcional) Você pode fornecer o nome do aplicativo para fins de telemetria Microsoft. O valor padrão é None, significa que ele não será passado para Microsoft.

Valor padrão: None
app_version

(opcional) Você pode fornecer a versão do aplicativo para fins de telemetria Microsoft. O valor padrão é None, significa que ele não será passado para Microsoft.

Valor padrão: None
client_capabilities

(opcional) Permite a configuração de um ou mais recursos de cliente, por exemplo, ["CP1"].

A funcionalidade do cliente destina-se a informar ao plataforma de identidade da Microsoft (STS) para o qual esse cliente é capaz, para que o STS possa decidir ativar determinados recursos. Por exemplo, se o cliente for capaz de lidar com o desafio de declarações, o STS poderá emitir tokens de acesso da CAE (Avaliação Contínua de Acesso) aos recursos, sabendo que quando o recurso emitir um desafio de declarações , o cliente poderá lidar com esses desafios.

Detalhes da implementação: a funcionalidade do cliente é implementada usando o parâmetro "declarações" no fio, por enquanto. A MSAL irá combiná-las no parâmetro de declarações que você fornecerá posteriormente por meio de uma das solicitações de token de aquisição.

Valor padrão: None
azure_region
str

(opcional) Instrui a MSAL a usar o serviço de token regional do Entra. Esse recurso herdado só está disponível para aplicativos de primeira parte. Há suporte apenas para acquire_token_for_client().

Dá suporte a 4 valores:

  1. azure_region=None - Esse valor padrão significa que nenhuma região está configurada. A MSAL usará a região definida em env var MSAL_FORCE_REGION.

  2. azure_region="some_region" - o que significa que a região especificada é usada.

  3. azure_region=True - o que significa que a MSAL tentará detectar automaticamente a região. Isso não é recomendado.

  4. azure_region=False - o que significa que a MSAL não usará nenhuma região.

Note

A descoberta automática de região foi testada em VMs e em Azure Functions. Não é confiável.

Os aplicativos que usam essa opção devem configurar um curto tempo limite.

Para obter mais detalhes e para os valores da cadeia de caracteres de região

ver https://learn.microsoft.com/entra/msal/dotnet/resources/region-discovery-troubleshooting

Novo na versão 1.12.0.

Valor padrão: None
exclude_scopes

(opcional) Historicamente, os códigos rígidos msal offline_access escopo, o que permitiria que seu aplicativo tivesse acesso prolongado aos dados do usuário. Se isso for desnecessário ou indesejável para seu aplicativo, agora você poderá usar esse parâmetro para fornecer uma lista de exclusão de escopos, como exclude_scopes = ["offline_access"].

Valor padrão: None
http_cache

A MSAL está armazenando tokens em cache há muito tempo no token_cache. Recentemente, a MSAL também introduziu um conceito de http_cache, armazenando automaticamente alguma quantidade finita de respostas http não token, de modo que a vida útilPublicClientApplication e ConfidentialClientApplication seria mais performante e responsiva em algumas situações.

Esse http_cache parâmetro aceita qualquer objeto semelhante a ditado. Se não for fornecido, a MSAL usará um ditado na memória.

Se seu aplicativo for um aplicativo de linha de comando (CLI), você desejará manter seu http_cache em diferentes execuções da CLI. O formato do arquivo persistente pode ser alterado devido, mas não se limitando ao protocolo instável, portanto, sua implementação deve tolerar erros de carregamento inesperados. A receita a seguir mostra uma maneira de fazer isso:


   # Just add the following lines at the beginning of your CLI script
   import sys, atexit, pickle, logging
   http_cache_filename = sys.argv[0] + ".http_cache"
   try:
       with open(http_cache_filename, "rb") as f:
           persisted_http_cache = pickle.load(f)  # Take a snapshot
   except (
           FileNotFoundError,  # Or IOError in Python 2
           pickle.UnpicklingError,  # A corrupted http cache file
           AttributeError,  # Cache created by a different version of MSAL
           ):
       persisted_http_cache = {}  # Recover by starting afresh
   except:  # Unexpected exceptions
       logging.exception("You may want to debug this")
       persisted_http_cache = {}  # Recover by starting afresh
   atexit.register(lambda: pickle.dump(
       # When exit, flush it back to the file.
       # It may occasionally overwrite another process's concurrent write,
       # but that is fine. Subsequent runs will reach eventual consistency.
       persisted_http_cache, open(http_cache_file, "wb")))

   # And then you can implement your app as you normally would
   app = msal.PublicClientApplication(
       "your_client_id",
       ...,
       http_cache=persisted_http_cache,  # Utilize persisted_http_cache
       ...,
       #token_cache=...,  # You may combine the old token_cache trick
           # Please refer to token_cache recipe at
           # https://msal-python.readthedocs.io/en/latest/#msal.SerializableTokenCache
       )
   app.acquire_token_interactive(["your", "scope"], ...)

O conteúdo dentro http_cache é barato de obter. Não é necessário compartilhá-los entre aplicativos diferentes.

O conteúdo dentro http_cache não conterá tokens nem PII (Informações de Identificação Pessoal). A criptografia é desnecessária.

Novo na versão 1.16.0.

Valor padrão: None
instance_discovery
<xref:boolean>

Historicamente, a MSAL se conectaria a um ponto de extremidade central localizado https://login.microsoftonline.com para adquirir alguns metadados, especialmente ao usar uma autoridade desconhecida. Esse comportamento é conhecido como Descoberta de Instância.

Esse parâmetro usa como padrão None, que habilita a Descoberta de Instância.

Se você souber algumas autoridades que permitem que a MSAL opere com as-is, sem envolver nenhuma Descoberta de Instância, o padrão recomendado é:


   known_authorities = frozenset([  # Treat your known authorities as const
       "https://contoso.com/adfs", "https://login.azs/foo"])
   ...
   authority = "https://contoso.com/adfs"  # Assuming your app will use this
   app1 = PublicClientApplication(
       "client_id",
       authority=authority,
       # Conditionally disable Instance Discovery for known authorities
       instance_discovery=authority not in known_authorities,
       )

Se você não conhece algumas autoridades de antemão, ainda quer que a MSAL aceite qualquer autoridade que você fornecerá, você pode usar uma False para desabilitar incondicionalmente a Descoberta de Instâncias.

Novo na versão 1.19.0.

Valor padrão: None
allow_broker
<xref:boolean>

Preterido. Use enable_broker_on_windows em seu lugar.

Valor padrão: None
enable_pii_log
<xref:boolean>

Quando habilitados, os logs podem incluir PII (Informações de Identificação Pessoal). Isso pode ser útil na solução de problemas de comportamentos do agente. O comportamento padrão é False.

Novo na versão 1.24.0.

Valor padrão: None
oidc_authority
str

Adicionado na versão 1.28.0: é uma URL que identifica uma autoridade do OpenID Connect (OIDC) do formato https://contoso.com/tenant. A MSAL anexará ".well-known/openid-configuration" à autoridade e recuperará os metadados do OIDC a partir daí, para descobrir os pontos de extremidade.

Observação: O agente NÃO será usado para a autoridade OIDC.

Valor padrão: None

Métodos

acquire_token_for_client

Adquire token para o cliente confidencial atual, não para um usuário final.

Como a MSAL Python 1.23, ela procurará automaticamente o token do cache e enviará apenas a solicitação para o Provedor de Identidade quando o cache falhar.

acquire_token_on_behalf_of

Adquire token usando o fluxo OBO (em nome).

O aplicativo atual é um serviço de camada intermediária que foi chamado com um token que representa um usuário final. O aplicativo atual pode usar esse token (também conhecido como uma declaração de usuário) para solicitar outro token para acessar a API Web downstream, em nome desse usuário. Veja os documentos detalhados aqui .

O aplicativo de camada intermediária atual não tem interação do usuário para obter consentimento. Veja como obter consentimento antecipadamente para seu aplicativo de camada intermediária a partir deste artigo. https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#gaining-consent-for-the-middle-tier-application

remove_tokens_for_client

Remova todos os tokens adquiridos anteriormente por meio acquire_token_for_client do cliente atual.

acquire_token_for_client

Adquire token para o cliente confidencial atual, não para um usuário final.

Como a MSAL Python 1.23, ela procurará automaticamente o token do cache e enviará apenas a solicitação para o Provedor de Identidade quando o cache falhar.

acquire_token_for_client(scopes, claims_challenge=None, fmi_path=None, **kwargs)

Parâmetros

Nome Description
scopes
Obrigatório

(Obrigatório) Escopos solicitados para acessar uma API protegida (um recurso).

claims_challenge

O parâmetro claims_challenge solicita declarações específicas solicitadas pelo provedor de recursos na forma de uma diretiva claims_challenge no cabeçalho www-authenticate a ser retornado do Ponto de Extremidade UserInfo e/ou no Token de ID e/ou Token de Acesso. É uma cadeia de caracteres de um objeto JSON que contém listas de declarações que estão sendo solicitadas desses locais.

Valor padrão: None
fmi_path
str

Optional. O caminho da credencial FMI (Identidade Gerenciada Federada). Quando fornecido, ele é enviado como o fmi_path parâmetro no corpo da solicitação de token e o token resultante é armazenado em cache separadamente para que diferentes caminhos FMI não compartilhem tokens armazenados em cache. Exemplo de uso:


   result = cca.acquire_token_for_client(
       scopes=["api://resource/.default"],
       fmi_path="SomeFmiPath/FmiCredentialPath",
   )
Valor padrão: None

Retornos

Tipo Description

Um ditado que representa a resposta json de Microsoft Entra:

  • Uma resposta bem-sucedida conteria a chave "access_token",

  • uma resposta de erro conteria "erro" e geralmente "error_description".

acquire_token_on_behalf_of

Adquire token usando o fluxo OBO (em nome).

O aplicativo atual é um serviço de camada intermediária que foi chamado com um token que representa um usuário final. O aplicativo atual pode usar esse token (também conhecido como uma declaração de usuário) para solicitar outro token para acessar a API Web downstream, em nome desse usuário. Veja os documentos detalhados aqui .

O aplicativo de camada intermediária atual não tem interação do usuário para obter consentimento. Veja como obter consentimento antecipadamente para seu aplicativo de camada intermediária a partir deste artigo. https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#gaining-consent-for-the-middle-tier-application

acquire_token_on_behalf_of(user_assertion, scopes, claims_challenge=None, **kwargs)

Parâmetros

Nome Description
user_assertion
Obrigatório
str

O token de entrada já recebido por este aplicativo

scopes
Obrigatório

Escopos exigidos pela API downstream (um recurso).

claims_challenge

O parâmetro claims_challenge solicita declarações específicas solicitadas pelo provedor de recursos na forma de uma diretiva claims_challenge no cabeçalho www-authenticate a ser retornado do Ponto de Extremidade UserInfo e/ou no Token de ID e/ou Token de Acesso. É uma cadeia de caracteres de um objeto JSON que contém listas de declarações que estão sendo solicitadas desses locais.

Valor padrão: None

Retornos

Tipo Description

Um ditado que representa a resposta json de Microsoft Entra:

  • Uma resposta bem-sucedida conteria a chave "access_token",

  • uma resposta de erro conteria "erro" e geralmente "error_description".

remove_tokens_for_client

Remova todos os tokens adquiridos anteriormente por meio acquire_token_for_client do cliente atual.

remove_tokens_for_client()