Exercício: implementar a autenticação interativa usando MSAL.NET
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
- Uma conta do Azure com uma assinatura ativa. Caso ainda não tenha uma assinatura, você pode se inscrever para obter uma avaliação gratuita em https://azure.com/free
- Visual Studio Code: você pode instalar o Visual Studio Code por meio de https://code.visualstudio.com.
- Uma versão do SDK https://dotnet.microsoft.com/download/dotnet do .NET (6.0, 7.0 ou 8.0)
Registrar um novo aplicativo
Entre no portal: https://portal.azure.com
Pesquise e selecione Microsoft Entra ID.
Em Gerenciar, selecione Registros de aplicativo>Novo registro.
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.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
Inicie o Visual Studio Code e abra um terminal selecionando Terminal e Novo Terminal.
Crie uma pasta para o projeto e acesse-a.
md az204-auth cd az204-auth
Crie o aplicativo de console .NET.
dotnet new console
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
Adicione o pacote
Microsoft.Identity.Client
ao projeto em um terminal no Visual Studio Code.dotnet add package Microsoft.Identity.Client
Abra o arquivo Program.cs e adicione instruções
using
para incluirMicrosoft.Identity.Client
e habilitar operações assíncronas.using System.Threading.Tasks; using Microsoft.Identity.Client;
Altere o método Main para habilitar a assincronia.
public static async Task Main(string[] args)
Adicionar código para a autenticação interativa
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";
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.
Defina o escopo de permissão para a solicitação de token. Adicione o seguinte código ao
PublicClientApplicationBuilder
.string[] scopes = { "user.read" };
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
No terminal do Visual Studio Code, execute
dotnet build
para verificar se há erros e depoisdotnet run
para executar o aplicativo.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.
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.
Você deverá ver os resultados semelhantes ao exemplo abaixo no console.
Token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....