Exercício - Implementar autenticação interativa usando MSAL.NET

Concluído

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

  • Registar uma aplicação na plataforma de identidade da Microsoft
  • Use a PublicClientApplicationBuilder classe em MSAL.NET
  • Adquira um token interativamente em um aplicativo de console

Pré-requisitos

Registar uma nova aplicação

  1. Inicie sessão no portal: https://portal.azure.com

  2. Procure e selecione Microsoft Entra ID.

  3. Em Gerir, selecione Registos de>aplicações Novo registo.

  4. Quando a página Registar uma aplicação for apresentada, introduza as informações de registo da aplicação:

    Campo Valor
    Nome az204appreg
    Tipos de conta suportados Selecione Contas somente neste diretório organizacional
    URI de redirecionamento (opcional) Selecione Cliente público/nativo (mobile & desktop) e digite http://localhost na caixa à direita.
  5. Selecione Registar.

A ID do Microsoft Entra atribui uma ID de aplicativo (cliente) exclusiva ao seu aplicativo e você é direcionado 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, em seguida, New Terminal.

  2. Crie uma pasta para o projeto e mude para a pasta.

    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
    

Criar o aplicativo de console

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

Adicionar pacotes e usar instruções

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

    dotnet add package Microsoft.Identity.Client
    
  2. Abra o arquivo Program.cs e adicione using instruções 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 o async.

    public static async Task Main(string[] args)
    

Adicionar código para a autenticação interativa

  1. Você precisa de duas variáveis para armazenar 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 PublicClientApplicationBuilder classe para criar o contexto de autorização.

    var app = PublicClientApplicationBuilder
        .Create(_clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
        .WithRedirectUri("http://localhost")
        .Build();
    
    Código Description
    .Create Cria um a partir de um PublicClientApplicationBuilder 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 user.read de API para o Microsoft Graph. Você usa 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 abaixo do PublicClientApplicationBuilderarquivo .

    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}");
    

Rever candidatura concluída

O conteúdo do arquivo Program.cs deve ser semelhante ao 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 a aplicação

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

  2. O aplicativo abre o navegador padrão solicitando que você selecione a conta com a qual deseja se 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 autentica no aplicativo registrado, você recebe uma notificação de Permissões solicitadas solicitando que você aprove o aplicativo para ler os dados associados à sua conta. Selecione Aceitar.

    Select **Accept** to grant the permission.

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

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....