Compartilhar via


Autentique aplicativos Java nos serviços do Azure durante o desenvolvimento local usando autenticação intermediada.

A autenticação agenciada coleta credenciais do usuário usando o agente de autenticação do sistema para autenticar um aplicativo. Um agente de autenticação do sistema é um aplicativo em execução no computador de um usuário que gerencia os handshakes de autenticação e a manutenção de token para todas as contas conectadas.

A autenticação agenciada oferece os seguintes benefícios:

  • Enables Single Sign-On (SSO): Permite que os aplicativos simplifiquem a forma como os usuários se autenticam com Microsoft Entra ID e protege Microsoft Entra ID tokens de atualização contra exfiltração e uso indevido.
  • Segurança aprimorada: Muitos aprimoramentos de segurança são entregues com o intermediário, sem a necessidade de atualizar a lógica do aplicativo.
  • Suporte a recursos aprimorados: Com a ajuda do agente, os desenvolvedores podem acessar recursos avançados de sistema operacional e serviço.
  • Integração do sistema: Aplicativos que usam o plug-and-play do agente com o seletor de conta interno, permitindo que o usuário escolha rapidamente uma conta existente em vez de reentrar nas mesmas credenciais várias vez.
  • Proteção de Token: Garante que os tokens de atualização estejam associados ao dispositivo e permita que os aplicativos adquiram tokens de acesso associados ao dispositivo. Consulte a Proteção de Token.

Windows fornece um agente de autenticação chamado Web Account Manager (WAM). O WAM permite que provedores de identidade, como Microsoft Entra ID, conectem-se nativamente ao sistema operacional e forneçam serviços de logon seguros aos aplicativos. A autenticação agenciada habilita o aplicativo para todas as operações permitidas pelas credenciais de logon interativas.

Há suporte para contas pessoais e contas corporativas ou de estudante da Microsoft. Em versões de Windows com suporte, a interface do usuário baseada em navegador padrão é substituída por uma experiência de autenticação mais suave, semelhante a aplicativos Windows internos.

Configurar o aplicativo para autenticação agenciada

Para habilitar a autenticação agenciada em seu aplicativo, siga estas etapas:

  1. No portal Azure, navegue até Microsoft Entra ID e selecione App registrations no menu à esquerda.

  2. Selecione o registro do seu aplicativo e depois Autenticação.

  3. Adicione o URI de redirecionamento apropriado ao registro do aplicativo por meio de uma configuração de plataforma:

    1. Em Configurações da plataforma, selecione + Adicionar uma plataforma.

    2. Em Configurar plataformas, selecione o bloco do seu tipo de aplicativo (plataforma) para definir suas configurações, como aplicativos móveis e de área de trabalho.

    3. Em URIs de redirecionamento personalizado, insira o seguinte URI de redirecionamento:

      ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}

      Substitua {your_client_id} pela ID do aplicativo (cliente) do painel Visão Geral do registro do aplicativo.

    4. Selecione Configurar.

    Para saber mais, consulte Adicionar um URI de redirecionamento a um registro de aplicativo.

  4. De volta ao painel Autenticação, em Configurações avançadas, selecione Sim para Permitir fluxos de clientes públicos.

  5. Selecione Salvar para aplicar as alterações.

  6. Para autorizar o aplicativo para recursos específicos, navegue até o recurso em questão, selecione API Permissions e habilite Microsoft Graph e outros recursos que você deseja acessar.

    Importante

    Você também deve ser o administrador do seu locatário para autorizar o uso do aplicativo ao fazer login pela primeira vez.

Atribuir funções

Para executar com êxito o código do aplicativo com autenticação intermediada, conceda permissões à conta de usuário usando Azure RBAC (controle de acesso baseado em função). Atribua uma função apropriada à sua conta de usuário para o serviço de Azure relevante. Por exemplo:

  • Azure Blob Storage: atribua a função Storage Account Data Contributor.
  • Azure Key Vault: atribuir a função Key Vault Secrets Officer.

Se um aplicativo for especificado, ele deverá ter permissões de API definidas para user_impersonation Access Azure Storage (etapa 6 na seção anterior). Essa permissão de API permite que o aplicativo acesse o armazenamento do Azure em nome do usuário autenticado após o consentimento ser concedido durante o login.

Implementar o código

A biblioteca Azure Identity dá suporte à autenticação agenciada usando InteractiveBrowserCredential. A biblioteca azure-identity-broker fornece InteractiveBrowserBrokerCredentialBuilder, que cria um InteractiveBrowserCredential capaz de usar o agente de autenticação do sistema. Por exemplo, para usar a autenticação agenciada em um aplicativo de console Java para autenticar para Azure Key Vault com o SecretClient, siga estas etapas:

  1. Adicione a dependência azure-identity-broker ao arquivo pom.xml:

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-broker</artifactId>
    </dependency>
    
  2. Obtenha uma referência à janela pai na parte superior da qual a caixa de diálogo do seletor de conta deve aparecer. Para obter exemplos, consulte Obter um identificador de janela.

  3. Crie uma instância de InteractiveBrowserCredential usando InteractiveBrowserBrokerCredentialBuilder:

    import com.azure.identity.InteractiveBrowserCredential;
    import com.azure.identity.broker.InteractiveBrowserBrokerCredentialBuilder;
    import com.azure.security.keyvault.secrets.SecretClient;
    import com.azure.security.keyvault.secrets.SecretClientBuilder;
    import com.azure.security.keyvault.secrets.models.KeyVaultSecret;
    
    long windowHandle = getWindowHandle(); // See examples below
    
    InteractiveBrowserCredential credential = new InteractiveBrowserBrokerCredentialBuilder()
        .setWindowHandle(windowHandle)
        .useDefaultBrokerAccount()
        .build();
    
    SecretClient client = new SecretClientBuilder()
        .vaultUrl("https://<your-key-vault-name>.vault.azure.net")
        .credential(credential)
        .buildClient();
    
    KeyVaultSecret secret = client.getSecret("MySecret");
    System.out.println("Retrieved secret: " + secret.getName());
    

No exemplo anterior, useDefaultBrokerAccount opta por um fluxo de autenticação silenciosa e agenciado com a conta do sistema padrão. Dessa forma, o usuário não precisa selecionar repetidamente a mesma conta. Se a autenticação silenciosa e agenciada falhar, InteractiveBrowserCredential retornará à autenticação interativa e agenciada.

A captura de tela a seguir mostra a experiência de autenticação interativa e agenciada alternativa:

Screenshot da experiência de login do Windows ao usar uma instância InteractiveBrowserCredential com suporte a agente para autenticar um usuário.

Obter um identificador de janela

Quando você se autentica interativamente usando InteractiveBrowserCredential, precisa de um identificador de janela pai para garantir que a caixa de diálogo de autenticação apareça corretamente na janela que envia a solicitação.

Aplicativo JavaFX

Para um aplicativo JavaFX, use JNA (Java Native Access) para obter o identificador de janela:

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;

public long getWindowHandle(Stage stage) {
    WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, stage.getTitle());
    return Pointer.nativeValue(hwnd.getPointer());
}

Aplicativo de console

Para um aplicativo de console no Windows, use o JNA para obter o identificador da janela do console:

import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.WinDef;

WinDef.HWND hwnd = Kernel32.INSTANCE.GetConsoleWindow();
long windowHandle = Pointer.nativeValue(hwnd.getPointer());