Autenticação Integrada do Windows

Se a sua aplicação de desktop ou móvel correr no Windows e numa máquina ligada a um domínio Windows (Active Directory ou Microsoft Entra ligados), é possível usar a Autenticação Windows Integrada (IWA) para adquirir um token silenciosamente. Nenhuma interface do usuário é necessária ao usar o aplicativo.

final String AUTHORITY;
final String APP_ID;
String userName;
List<String> scopes;

PublicClientApplication app = PublicClientApplication.builder(APP_ID)
        .authority(AUTHORITY)
        .build();

IntegratedWindowsAuthenticationParameters parameters =
        IntegratedWindowsAuthenticationParameters.builder(scope, userName).build();

IAuthenticationResult future = app.acquireToken(parameters).get();

Restrições

  • Apenas utilizadores federados*, ou seja, quando a autenticação está a ser federada para uma autoridade local (ADFS, por exemplo), ou cenários híbridos onde o seamless-sso está ativado. Os locatários exclusivamente na cloud, em que os utilizadores estão diretamente no Microsoft Entra ID, sem qualquer suporte do Active Directory subjacente, não podem utilizar este fluxo.
  • A IWA NÃO contorna MFA (autenticação multifator). Se a MFA estiver configurada, a IWA poderá falhar se for necessário um desafio de MFA, porque a MFA requer interação do usuário.

Esta é complicada. A IWA não é interativa, mas a 2FA requer interatividade do utilizador. Tu não controlas quando o fornecedor de identidade solicita a realização da 2FA, é o administrador do inquilino que controla. Pelas nossas observações, a 2FA é necessária quando faz login a partir de um país/região diferente, quando não está ligado via VPN a uma rede corporativa, e por vezes até quando está ligado via VPN. Não esperes um conjunto determinístico de regras, o Microsoft Entra ID usa IA para aprender continuamente se for necessário 2FA. Deves recorrer a um prompt de utilizador se o IWA falhar

  • A autoridade transmitida em PublicApplication deve ser:

    • tenanted (do tipo https://login.microsoftonline.com/{tenant}/, em que tenant é o GUID que representa o ID do inquilino ou um domínio associado ao inquilino.
    • para quaisquer contas profissionais e escolares (https://login.microsoftonline.com/organizations/)

    As contas pessoais da Microsoft não são suportadas (não pode utilizar os locatários /common ou /consumers)

  • Porque a Autenticação Windows Integrada é um fluxo silencioso:

    • O utilizador da sua aplicação deve ter previamente consentido em usar a aplicação
    • ou o administrador do tenant deve ter previamente consentido que todos os utilizadores do tenant usem a aplicação.
    • Isto significa que:
      • ou o utilizador, como desenvolvedor, clicou no botão Conceder no portal do Azure para si próprio,
      • ou um administrador do inquilino clicou no botão Conceder/revogar o consentimento de administrador para {tenant domain} no separador Permissões da API do registo da aplicação
      • Ou então forneceu uma forma para os utilizadores consentirem com a aplicação
      • ou forneceu uma forma de o administrador do locatário dar consentimento à aplicação