Partilhar via


Autenticar aplicativos .NET nos serviços do Azure durante o desenvolvimento local usando a 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:

  • Habilita Sign-On único (SSO): Permite que os aplicativos simplifiquem a forma como os usuários se autenticam com o Microsoft Entra ID e protege os tokens de atualização do 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.

O Windows fornece um agente de autenticação chamado Web Account Manager (WAM). O WAM permite que provedores de identidade, como o Microsoft Entra ID, se conectem nativamente ao sistema operacional e forneçam serviços de login seguro para aplicativos. 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 suportadas do Windows, a interface do usuário padrão baseada em navegador é substituída por uma experiência de autenticação mais suave, semelhante aos aplicativos internos do Windows.

O macOS não inclui nativamente um agente de autenticação integrado. A biblioteca cliente Azure Identity implementa funcionalidades de autenticação intermediada através de mecanismos específicos da plataforma e pode integrar-se com aplicações como o Microsoft Company Portal quando os dispositivos são geridos. Para obter mais informações, consulte Plug-in Microsoft Enterprise SSO para dispositivos Apple.

O Linux usa o logon único da Microsoft para Linux como seu agente de autenticação.

Configurar o aplicativo para autenticação intermediada

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

  1. No portal do Azure, navegue até Microsoft Entra ID e selecione Registros de aplicativo no menu à esquerda.

  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 para sua plataforma:

      Platform Redirecionar URL
      Windows 10+ ou WSL ms-appx-web://Microsoft.AAD.BrokerPlugin/{your_client_id}
      macOS msauth.com.msauth.unsignedapp://auth para aplicativos não assinados
      msauth.{bundle_id}://auth para aplicativos assinados
      Linux https://login.microsoftonline.com/common/oauth2/nativeclient

      Substitua {your_client_id} ou {bundle_id} pelo ID do aplicativo (cliente) no 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 Guardar para aplicar as alterações.

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

    Importante

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

Atribuir funções

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

  • Armazenamento de Blobs do Azure: Atribua a função Colaborador de Dados da Conta de Armazenamento.
  • Azure Key Vault: atribua a função Oficial de Segredos do Cofre de Chaves.

Se uma aplicação for especificada, deverá ter permissões de API definidas para acesso de representação de usuário ao Armazenamento do Azure (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 conectado após o consentimento ser concedido durante o login.

Implementar o código

A biblioteca de identidade do Azure dá suporte à autenticação intermediada usando InteractiveBrowserCredential. Por exemplo, para usar InteractiveBrowserCredential em um aplicativo MAUI para autenticar no Cofre da Chave do Azure com o SecretClient, siga estas etapas:

A biblioteca de Identidade do Azure fornece autenticação interativa usando InteractiveBrowserCredential. Por exemplo, para usar InteractiveBrowserCredential em um aplicativo de console para autenticar no Azure Key Vault com o SecretClient, siga estas etapas:

  1. Instale os pacotes Azure.Identity e Azure.Identity.Broker .

    dotnet add package Azure.Identity
    dotnet add package Azure.Identity.Broker
    
  2. Obtenha uma referência à janela pai sobre a qual a caixa de diálogo do seletor de contas deve aparecer.

  3. Crie uma instância de InteractiveBrowserCredential usando InteractiveBrowserCredentialBrokerOptions.

// Get the parent window handle for MAUI on Windows
Microsoft.Maui.Controls.Window? parentWindow = this.GetParentWindow();
Microsoft.UI.Xaml.Window? windowHandle = parentWindow?.Handler?.PlatformView as Microsoft.UI.Xaml.Window;
IntPtr hwnd = windowHandle != null ? WinRT.Interop.WindowNative.GetWindowHandle(windowHandle) : IntPtr.Zero;

// Configure InteractiveBrowserCredentialBrokerOptions with parent window reference
InteractiveBrowserCredentialBrokerOptions options = new(hwnd)
{
    UseDefaultBrokerAccount = true,
};

// Create credential that will use WAM broker on Windows
InteractiveBrowserCredential credential = new(options);

SecretClient client = new(new Uri(KeyVaultUrl), credential);
KeyVaultSecret secret = await client.GetSecretAsync(SecretName);
  1. Instale os pacotes Azure.Identity e Azure.Identity.Broker .

    dotnet add package Azure.Identity
    dotnet add package Azure.Identity.Broker
    

    Observação

    O suporte para macOS existe nas Azure.Identity.Broker versões 1.3.0 e posteriores.

  2. Obtenha uma referência para a janela principal sobre a qual a caixa de diálogo do seletor de contas deve aparecer.

  3. Crie uma instância de InteractiveBrowserCredential usando InteractiveBrowserCredentialBrokerOptions.

// Get the parent window handle for MAUI on Mac Catalyst
Microsoft.Maui.Controls.Window? parentWindow = this.GetParentWindow();
UIWindow? uiWindow = parentWindow?.Handler?.PlatformView as UIWindow;
IntPtr hwnd = uiWindow != null ? uiWindow.Handle : IntPtr.Zero;

// Configure InteractiveBrowserCredentialBrokerOptions with parent window reference
InteractiveBrowserCredentialBrokerOptions options = new(hwnd)
{
    UseDefaultBrokerAccount = true,
};

// Create credential that will use the broker on macOS
InteractiveBrowserCredential credential = new(options);

SecretClient client = new(new Uri(KeyVaultUrl), credential);
KeyVaultSecret secret = await client.GetSecretAsync(SecretName);
  1. Instale os pacotes Azure.Identity e Azure.Identity.Broker .

    dotnet add package Azure.Identity
    dotnet add package Azure.Identity.Broker
    

    Observação

    O suporte Linux existe nas Azure.Identity.Broker versões 1.3.0 e posteriores.

  2. Obtenha uma referência para a janela principal sobre a qual a caixa de diálogo do seletor de contas deve aparecer.

  3. Crie uma instância de InteractiveBrowserCredential usando InteractiveBrowserCredentialBrokerOptions.

    /// <summary>
    /// Get the handle of the console window for Linux
    /// </summary>
    [DllImport("libX11")]
    static extern IntPtr XOpenDisplay(string? display);
    
    [DllImport("libX11")]
    static extern IntPtr XRootWindow(IntPtr display, int screen);
    
    try
    {
        IntPtr parentWindowHandle = XRootWindow(XOpenDisplay(null), 0);
        Func<IntPtr> consoleWindowHandleProvider = () => parentWindowHandle;
    
        InteractiveBrowserCredentialBrokerOptions options = new(parentWindowHandle)
        {
            UseDefaultBrokerAccount = true,
        };
        
        // Create the InteractiveBrowserCredential using broker support
        InteractiveBrowserCredential credential = new(options);
    
        Uri vaultUri = new("https://<your-key-vault-name>.vault.azure.net/");
        SecretClient client = new(vaultUri, credential);
    
        Console.WriteLine("Retrieving secret 'MySecret' from Key Vault...");
        KeyVaultSecret secret = await client.GetSecretAsync("MySecret");
    
        return 0;
    }
    

Sugestão

Exiba o código completo do aplicativo de exemplo no repositório GitHub de documentos .NET.

No exemplo anterior, a propriedade UseDefaultBrokerAccount é definida como true, que opta por um fluxo de autenticação intermediado silencioso com a conta padrão do sistema. Desta forma, o utilizador não tem de selecionar repetidamente a mesma conta. Se a autenticação intermediada falhar em modo silencioso, ou se UseDefaultBrokerAccount estiver definida como false, InteractiveBrowserCredential recairá para autenticação interativa e intermediada.

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

Uma imagem que mostra a experiência de início de sessão no Windows ao usar uma instância do InteractiveBrowserCredential habilitada para corretor para autenticar um utilizador.

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

Um screenshot que mostra a experiência de autenticação do macOS ao usar uma instância InteractiveBrowserCredential com suporte a broker para autenticar um utilizador.

O vídeo a seguir mostra a experiência alternativa de autenticação interativa e intermediada:

Um gif animado que mostra a experiência de entrada no Linux ao usar uma instância InteractiveBrowserCredential habilitada para agente para autenticar um usuário.