Exercício: implementar a autenticação interativa usando MSAL.NET

Concluído

Neste exercício, você aprenderá a executar as seguintes ações:

  • Registrar um aplicativo na plataforma de identidade da Microsoft
  • Usar a classe PublicClientApplicationBuilder em MSAL.NET
  • Adquirir um token interativamente em um aplicativo de console

Pré-requisitos

Registrar um novo aplicativo

  1. Entre no portal: https://portal.azure.com

  2. Pesquise e selecione Microsoft Entra ID.

  3. Em Gerenciar, selecione Registros de aplicativo>Novo registro.

  4. Quando a página Registrar um aplicativo for exibida, insira as informações de registro do aplicativo:

    Campo Valor
    Nome az204appreg
    Tipos de conta compatíveis Selecione Contas somente neste diretório organizacional
    Redirecionar URI (opcional) Selecione Cliente público/nativo (móvel e desktop) e insira http://localhost na caixa à direita.
  5. Selecione Registrar.

O Microsoft Entra ID atribui uma ID de aplicativo (cliente) exclusiva ao seu aplicativo e você será levado para a página Visão geral do aplicativo.

Configurar o aplicativo de console

  1. Inicie o Visual Studio Code e abra um terminal selecionando Terminal e Novo Terminal.

  2. Crie uma pasta para o projeto e acesse-a.

    md az204-auth
    cd az204-auth
    
  3. Crie o aplicativo de console .NET.

    dotnet new console
    
  4. Abra a pasta az204-auth no Visual Studio Code.

    code . -r
    

Compilar o aplicativo de console

Nesta seção, você adicionará o código e os pacotes necessários ao projeto.

Adicionar pacotes e instruções using

  1. Adicione o pacote Microsoft.Identity.Client ao projeto em um terminal no Visual Studio Code.

    dotnet add package Microsoft.Identity.Client
    
  2. Abra o arquivo Program.cs e adicione instruções using para incluir Microsoft.Identity.Client e habilitar operações assíncronas.

    using System.Threading.Tasks;
    using Microsoft.Identity.Client;
    
  3. Altere o método Main para habilitar a assincronia.

    public static async Task Main(string[] args)
    

Adicionar código para a autenticação interativa

  1. Você precisará de duas variáveis para manter as IDs de Aplicativo (cliente) e Diretório (locatário). Você pode copiar esses valores do portal. Adicione o código a seguir e substitua os valores de cadeia de caracteres pelos valores apropriados do portal.

    private const string _clientId = "APPLICATION_CLIENT_ID";
    private const string _tenantId = "DIRECTORY_TENANT_ID";
    
  2. Use a classe PublicClientApplicationBuilder para criar o contexto de autorização.

    var app = PublicClientApplicationBuilder
        .Create(_clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
        .WithRedirectUri("http://localhost")
        .Build();
    
    Código Descrição
    .Create Cria um PublicClientApplicationBuilder a partir de um clientID.
    .WithAuthority Adiciona uma Autoridade conhecida correspondente a um servidor ADFS. No código, estamos especificando a nuvem pública e usando o locatário para o aplicativo que registramos.

Adquirir um token

Quando você registrou o aplicativo az204appreg, ele gerou automaticamente uma permissão de API user.read para o Microsoft Graph. Vamos usar essa permissão para adquirir um token.

  1. Defina o escopo de permissão para a solicitação de token. Adicione o seguinte código ao PublicClientApplicationBuilder.

    string[] scopes = { "user.read" };
    
  2. Adicione código para solicitar o token e gravar o resultado no console.

    AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
    
    Console.WriteLine($"Token:\t{result.AccessToken}");
    

Revisar aplicativo concluído

O conteúdo do arquivo Program.cs deve ser semelhante ao do seguinte exemplo:

using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace az204_auth
{
    class Program
    {
        private const string _clientId = "APPLICATION_CLIENT_ID";
        private const string _tenantId = "DIRECTORY_TENANT_ID";

        public static async Task Main(string[] args)
        {
            var app = PublicClientApplicationBuilder
                .Create(_clientId)
                .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
                .WithRedirectUri("http://localhost")
                .Build(); 
            string[] scopes = { "user.read" };
            AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

            Console.WriteLine($"Token:\t{result.AccessToken}");
        }
    }
}

Executar o aplicativo

  1. No terminal do Visual Studio Code, execute dotnet build para verificar se há erros e depois dotnet run para executar o aplicativo.

  2. O aplicativo abrirá o navegador padrão, solicitando que você selecione a conta com a qual deseja autenticar. Se houver várias contas listadas, selecione a associada ao locatário usado no aplicativo.

  3. Se esta for a primeira vez que você se autenticou no aplicativo registrado, você receberá uma notificação de Permissões solicitadas pedindo que você aprove o aplicativo para ler os dados associados à sua conta. Selecione Aceitar.

    Select **Accept** to grant the permission.

  4. Você deverá ver os resultados semelhantes ao exemplo abaixo no console.

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....