Partilhar via


Autenticar aplicações Java em serviços Azure durante o desenvolvimento local usando autenticação intermediada

A autenticação intermediada coleta credenciais de usuário usando o agente de autenticação do sistema para autenticar um aplicativo. Um agente de autenticação de sistema é um aplicativo executado na máquina 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 intermediada oferece os seguintes benefícios:

  • Ativa o Single Sign-On (SSO): Permite que as aplicações simplifiquem a autenticação dos utilizadores com Microsoft Entra ID e protege os tokens de atualização Microsoft Entra ID contra exfiltração e uso indevido.
  • Segurança reforçada: Muitos aprimoramentos de segurança são fornecidos com o corretor, sem a necessidade de atualizar a lógica do aplicativo.
  • Suporte aprimorado a recursos: Com a ajuda do corretor, os desenvolvedores podem acessar recursos avançados de sistema operacional e serviço.
  • Integração de sistemas: Aplicativos que usam o plug-and-play do broker com o seletor de contas integrado, permitindo que o usuário escolha rapidamente uma conta existente em vez de reinserir as mesmas credenciais repetidamente.
  • Proteção de token: Garante que os tokens de atualização estejam vinculados ao dispositivo e permite que os aplicativos adquiram tokens de acesso vinculado ao dispositivo. Consulte Proteção de tokens.

Windows fornece um corretor de autenticação chamado Gestor de Contas Web (WAM). O WAM permite que fornecedores de identidade como o Microsoft Entra ID se liguem nativamente ao sistema operativo e forneçam serviços de login seguros às aplicações. A autenticação intermediada habilita o aplicativo para todas as operações permitidas pelas credenciais de login interativas.

Há suporte para contas pessoais da Microsoft e contas corporativas ou de estudante. Nas versões Windows suportadas, a interface padrão baseada no navegador é substituída por uma autenticação mais suave, semelhante às aplicações Windows integradas.

Configurar o aplicativo para autenticação intermediada

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

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

  2. Selecione o registo para a sua aplicação e, em seguida, selecione Autenticação.

  3. Adicione o URI de redirecionamento apropriado ao registro do seu 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 para seu tipo de aplicativo (plataforma) para definir suas configurações, como aplicativos móveis e de desktop.

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

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

      Substitua {your_client_id} pelo ID da Aplicação (cliente) no painel de Visão Geral do registo da aplicação.

    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 Guardar para aplicar as alterações.

  6. Para autorizar a aplicação para recursos específicos, navegue até ao recurso em questão, selecione Permissões da API e ative Microsoft Graph e outros recursos aos quais pretende aceder.

    Importante

    Também tem de ser o administrador do seu inquilino para dar o seu consentimento à sua aplicação quando iniciar sessão pela primeira vez.

Atribuir funções

Para executar o código da sua aplicação com sucesso com autenticação intermediada, conceda permissões à sua conta de utilizador usando o controlo de acesso baseado em funções (RBAC) do Azure. Atribua um papel apropriado à tua conta de utilizador para o serviço Azure relevante. Por exemplo:

  • Azure Blob Storage: Atribuir o papel de Contribuidor de Dados da Conta de Armazenamento.
  • Azure Key Vault: Atribuir o papel de Oficial de Segredos do Key Vault.

Se uma aplicação for especificada, deve ter permissões de API definidas para user_impersonation Acesso Azure Storage (passo 6 na secção anterior). Esta permissão da API permite que a aplicação aceda ao armazenamento do Azure em nome do utilizador autenticado, após ser concedido o consentimento durante o início de sessão.

Implementar o código

A biblioteca Azure Identity suporta autenticação intermediária através do uso de InteractiveBrowserCredential. A biblioteca azure-identity-broker fornece InteractiveBrowserBrokerCredentialBuilder, que cria um InteractiveBrowserCredential capaz de usar o corretor de autenticação do sistema. Por exemplo, para usar autenticação intermediada numa aplicação de consola Java para autenticar a Azure Key Vault com o SecretClient, siga estes passos:

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

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity-broker</artifactId>
    </dependency>
    
  2. Obtenha uma referência à janela pai sobre a qual o diálogo do seletor de contas deve aparecer. Para exemplos, veja 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 aderir a um fluxo de autenticação silencioso e intermediado com a conta padrão do sistema. Desta forma, o utilizador não tem de selecionar repetidamente a mesma conta. Se a autenticação silenciosa e intermediada falhar, recorre InteractiveBrowserCredential à autenticação interativa e intermediada.

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

Captura de ecrã da experiência de início de sessão Windows ao usar uma instância InteractiveBrowserCredential ativada por broker para autenticar um utilizador.

Arranja uma maçaneta para a janela

Quando autenticas interativamente usando InteractiveBrowserCredential, precisas de um handle de janela pai para garantir que o diálogo de autenticação aparece corretamente sobre a janela que envia o pedido.

Aplicação JavaFX

Para uma aplicação JavaFX, use JNA (Java Native Access) para obter o identificador da 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());
}

Aplicação de consola

Para uma aplicação de consola no Windows, use o JNA para obter o handler da janela da consola:

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());