Usar MSAL Python com Gestor de Contas Web

Se está a construir uma aplicação Windows, pode considerar simplificar a autenticação dos utilizadores com a ajuda de um broker de autenticação. O Gestor de Contas Web (WAM) é um broker de autenticação que trabalha com MSAL Python. O WAM está disponível apenas no Windows 10 e superiores, bem como no Windows Server 2019 e superiores.

Para mais informações sobre os benefícios de utilizar um broker de autenticação, consulte O que é um broker na documentação MSAL.NET.

Utilização

Para usar o broker, terá de instalar os pacotes relacionados com o broker além do MSAL core do PyPI:

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

Se os pacotes relacionados com o broker não estiverem instalados e tentares usar o broker de autenticação, receberás o erro ImportError: Precisas de instalar dependência por: pip install "msal[broker]>=1.20,2<".

De seguida, instaure um novo PublicClientApplication e defina enable_broker_on_windows para True. Isto garantirá que o MSAL tente comunicar com WAM em vez de abrir uma nova janela do navegador. Se estiver a escrever uma aplicação multiplataforma, também precisará de usar enable_broker_on_mac, conforme descrito no artigo Sobre Usar MSAL Python com um Broker 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 pode obter um token ao invocar acquire_token_interactive e especificar um identificador da janela principal através de parent_window_handle:

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

O WAM requer um identificador da janela principal para garantir que a caixa de diálogo seja apresentada corretamente sobre a janela requerente. A MSAL não infere isto diretamente devido ao facto de existirem muitas variáveis que podem influenciar a que janela o WAM precisa de se ligar, e os programadores que desenvolvem aplicações são os mais indicados para decidir qual janela deve ser.

Para aplicações de consola, a MSAL facilita ao oferecer uma solução pronta a usar para obter a manivela da janela do terminal - CONSOLE_WINDOW_HANDLE. Para aplicações de ambiente de trabalho, pode ser necessário mais trabalho com a API do Windows para obter o handle da janela. Pacotes helper, como o pywin32 , podem ajudar com chamadas API.

Antes de executar a sua aplicação, certifique-se de que configura a URL de redirecionamento para a aplicação desktop:

Para usar o Windows Broker, a sua aplicação precisa de ter o URL correto de redirecionamento configurado no portal do Azure, na forma de:

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

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

Se a configuração e instanciação estiverem corretas, assim que executares a aplicação deves ver o broker de autenticação a ativar-se e permitir que o utilizador selecione a conta com que quer autenticar-se.

Exemplo de invocação do WAM a partir de Python

Vale a pena notar que, se mudar para a autenticação baseada em broker, se o utilizador já tiver iniciado sessão anteriormente e o estado de sessão iniciada ainda for válido, a chamada a acquire_token_interactive continuará a resultar numa tentativa silenciosa de obter um token e só apresentará um pedido de autenticação quando necessário. Se preferir solicitar sempre confirmação, pode utilizar este parâmetro opcional prompt="select_account".

Diferenças na experiência dos corretores

Dependendo da autoridade especificada ao instanciar PublicClientApplication, a interface de utilizador do corretor pode ser diferente.

/consumidores

Usado apenas para autenticação com contas pessoais da Microsoft.

Interface WAM para consumidores

/common

Usado para autenticação com contas pessoais da Microsoft, bem como com contas de trabalho e escola.

UI WAM para contas pessoais e profissionais

/organizações

Usado apenas para autenticação com contas de trabalho e escola.

Interface WAM apenas para contas profissionais

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

/TENANT_ID

Usado apenas para autenticação com contas de trabalho e escola dentro do inquilino especificado.

UI WAM para contas específicas de inquilinos

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