Usando Python MSAL com o Gerenciador de Contas Web

Se você estiver criando um aplicativo Windows, talvez considere simplificar a autenticação dos usuários com a ajuda de um agente de autenticação. O WAM (Gerenciador de Contas Web) é um agente de autenticação que funciona com Python MSAL. O WAM só está disponível em Windows 10 e superior, bem como Windows Server 2019 e superior.

Para obter mais informações sobre os benefícios de usar um agente de autenticação, consulte o que é um agente na documentação do MSAL.NET.

Usage

Para usar o broker, você precisará instalar os pacotes relacionados ao broker, além do pacote principal do MSAL disponível no PyPI:

pip install msal[broker]>=1.20,<2

Se os pacotes relacionados ao broker não estiverem instalados e você tentar usar o broker de autenticação, receberá o erro ImportError: Você precisa instalar a dependência com: pip install "msal[broker]>=1.20,<2".

Em seguida, instancie um novo PublicClientApplication e defina enable_broker_on_windows para True. Isso garantirá que a MSAL tente se comunicar com o WAM em vez de abrir uma nova janela do navegador. Se você estiver desenvolvendo um aplicativo multiplataforma, também precisará usar enable_broker_on_mac, conforme descrito no artigo Usando o MSAL Python com um agente de autenticação no macOS.

from msal import PublicClientApplication

app = PublicClientApplication(
    "CLIENT_ID",
    authority="https://login.microsoftonline.com/common",
    enable_broker_on_windows=True)

Agora você pode adquirir um token chamando acquire_token_interactive e especificando um identificador da janela pai por meio de parent_window_handle:

result = app.acquire_token_interactive(["User.ReadBasic.All"],
         parent_window_handle=app.CONSOLE_WINDOW_HANDLE)

Um identificador de janela pai é exigido pelo WAM para garantir que a caixa de diálogo seja mostrada corretamente na parte superior da janela de solicitação. A MSAL não infere isso diretamente devido ao fato de que há muitas variáveis que podem influenciar a janela à qual o WAM precisa se associar, e os desenvolvedores que criam aplicativos são mais adequados para decidir qual janela deve ser.

Para aplicativos de console, a MSAL facilita isso ao oferecer uma solução pronta para uso para obter o manipulador da janela do terminal - CONSOLE_WINDOW_HANDLE. Para aplicativos da área de trabalho, mais trabalho com a API Windows pode ser necessário para obter o identificador de janela. Pacotes auxiliares, como pywin32 , podem ajudar com chamadas à API.

Antes de executar seu aplicativo, configure a URL de redirecionamento para o aplicativo da área de trabalho:

Para usar o agente de Windows, seu aplicativo precisa ter a URL de redirecionamento correta configurada no portal do Azure, na forma de:

ms-appx-web://microsoft.aad.brokerplugin/YOUR_CLIENT_ID

Se a URL de redirecionamento não estiver configurada, você receberá um broker_error semelhante a (pii). Status: Response_Status.Status_ApiContractViolation, Código de erro: 3399614473, Tag: 557973642.

Se a configuração e a instanciação estiverem corretas, depois de executar o aplicativo, você deverá ver o agente de autenticação entrar em ação e permitir que o usuário selecione a conta com a qual deseja autenticar.

Exemplo de WAM sendo chamado a partir do Python

Vale a pena observar que, se você alternar para o uso da autenticação baseada em agente, se o usuário tiver sido conectado anteriormente e o estado conectado ainda for válido, a chamada acquire_token_interactive ainda resultará em uma tentativa silenciosa de adquirir um token e somente solicitará quando necessário. Se você preferir sempre exibir uma solicitação, poderá usar esse parâmetro opcional prompt="select_account".

Diferenças de experiência do agente

Dependendo da autoridade especificada ao instanciar PublicClientApplication, a interface do usuário do corretor pode ser diferente.

/Consumidores

Usado para autenticação somente com contas de Microsoft pessoais.

Interface de Usuário do WAM para consumidores

/common

Usado para autenticação com contas de Microsoft pessoais, bem como contas corporativas e de estudante.

Interface do usuário do WAM para contas pessoais e corporativas

/Organizações

Usado para autenticação apenas com contas corporativas e escolares.

Interface do usuário do WAM somente para contas corporativas

Se login_hint for fornecido, mas a conta ainda não estiver registrada no WAM, essa informação será preenchida automaticamente no campo Email ou telefone.

/TENANT_ID

Usado somente para autenticar com contas corporativas e escolares dentro do locatário especificado.

Interface de usuário do WAM para contas específicas do locatário

Se login_hint for fornecido, mas a conta ainda não estiver registrada no WAM, a dica será preenchida automaticamente no campo Email ou telefone .