Guia de início rápido: proteja uma API Web ASP.NET Core com a plataforma de identidade da Microsoft
Boas-vindas! Esta provavelmente não é a página que você estava esperando. Enquanto trabalhamos em uma correção, este link deve levá-lo ao artigo certo:
Pedimos desculpas pelo inconveniente e agradecemos a sua paciência enquanto trabalhamos para resolver este problema.
O guia de início rápido a seguir usa um exemplo de código de API da Web ASP.NET Core para demonstrar como restringir o acesso a recursos a contas autorizadas. O exemplo oferece suporte à autorização de contas pessoais da Microsoft e contas em qualquer organização do Microsoft Entra.
Pré-requisitos
- Conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.
- Inquilino do Microsoft Entra
- Um requisito mínimo do SDK do .NET 6.0
- Visual Studio 2022 ou Visual Studio Code
Passo 1: Registar a candidatura
Primeiro, registre a API da Web em seu locatário do Microsoft Entra e adicione um escopo seguindo estas etapas:
- Entre no centro de administração do Microsoft Entra como pelo menos um Administrador de Aplicativos.
- Navegue até Registros do aplicativo Identity>Applications>.
- Selecione Novo registo.
- Em Nome, insira um nome para o aplicativo. Por exemplo, digite AspNetCoreWebApi-Quickstart. Os usuários do aplicativo verão esse nome e poderão ser alterados posteriormente.
- Selecione Registar.
- Em Gerenciar, selecione Expor uma API>Adicionar um escopo. Para URI de ID do aplicativo, aceite o padrão selecionando Salvar e continuar e insira os seguintes detalhes:
- Nome do escopo:
access_as_user
- Quem pode consentir?: Administradores e utilizadores
- Nome de exibição do consentimento do administrador:
Access AspNetCoreWebApi-Quickstart
- Descrição do consentimento do administrador:
Allows the app to access AspNetCoreWebApi-Quickstart as the signed-in user.
- Nome de exibição do consentimento do usuário:
Access AspNetCoreWebApi-Quickstart
- Descrição do consentimento do utilizador:
Allow the application to access AspNetCoreWebApi-Quickstart on your behalf.
- Estado: Ativado
- Selecione Adicionar escopo para concluir a adição de escopo.
Etapa 2: Baixe o projeto ASP.NET Core
Baixe a solução ASP.NET Core do GitHub.
Nota
O exemplo de código atualmente tem como alvo o ASP.NET Core 3.1. O exemplo pode ser atualizado para usar o .NET Core 6.0 e é abordado nas seguintes etapas: Atualize o código de exemplo para ASP.NET Core 6.0. Este início rápido será preterido em um futuro próximo e será atualizado para usar o .NET 6.0.
Etapa 3: Configurar o projeto ASP.NET Core
Nesta etapa, o código de exemplo será configurado para funcionar com o registro do aplicativo que foi criado anteriormente.
Extraia o arquivo .zip para uma pasta local próxima à raiz do disco para evitar erros causados por limitações de comprimento de caminho no Windows. Por exemplo, extraia para C:\Azure-Samples.
Abra a solução na pasta webapi no editor de códigos.
Em appsettings.json, substitua os valores de
ClientId
, eTenantId
."ClientId": "Enter_the_Application_Id_here", "TenantId": "Enter_the_Tenant_Info_Here"
Enter_the_Application_Id_Here
é o ID do aplicativo (cliente) para o aplicativo registrado.- Substitua
Enter_the_Tenant_Info_Here
por uma das seguintes opções:- Se o aplicativo oferecer suporte a Contas somente neste diretório organizacional, substitua esse valor pelo ID do diretório (locatário) (um GUID) ou nome do locatário (por exemplo,
contoso.onmicrosoft.com
). O ID do diretório (locatário) pode ser encontrado na página Visão geral do aplicativo. - Se o aplicativo oferecer suporte a Contas em qualquer diretório organizacional, substitua esse valor por
organizations
. - Se a aplicação suportar Todos os utilizadores da conta Microsoft, deixe este valor como
common
.
- Se o aplicativo oferecer suporte a Contas somente neste diretório organizacional, substitua esse valor pelo ID do diretório (locatário) (um GUID) ou nome do locatário (por exemplo,
Para este início rápido, não altere nenhum outro valor no arquivo appsettings.json .
Etapa 4: Atualizar o código de exemplo para o ASP.NET Core 6.0
Para atualizar este exemplo de código para o ASP.NET Core 6.0 de destino, execute estas etapas:
- Abra webapi.csproj
- Remova a seguinte linha:
<TargetFramework>netcoreapp3.1</TargetFramework>
- Adicione a seguinte linha em seu lugar:
<TargetFramework>netcoreapp6.0</TargetFramework>
Esta etapa garantirá que o exemplo tenha como alvo a estrutura do .NET Core 6.0.
Etapa 5: Executar o exemplo
Abra um terminal e altere o diretório para a pasta do projeto.
cd webapi
Execute o seguinte comando para criar a solução:
dotnet run
Se a compilação tiver sido bem-sucedida, a seguinte saída será exibida:
Building...
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
...
Como funciona a amostra
Classe de inicialização
O middleware Microsoft.AspNetCore.Authentication usa uma Startup
classe que é executada quando o processo de hospedagem é iniciado. Em seu ConfigureServices
método, o AddMicrosoftIdentityWebApi
método de extensão fornecido por Microsoft.Identity.Web é chamado.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
}
O AddAuthentication()
método configura o serviço para adicionar autenticação baseada em JwtBearer.
A linha que contém .AddMicrosoftIdentityWebApi
adiciona a autorização da plataforma de identidade da Microsoft à API da Web. Em seguida, ele é configurado para validar tokens de acesso emitidos pela plataforma de identidade da Microsoft com base nas informações na AzureAD
seção do arquivo de configuração appsettings.json:
appsettings.json chave | Description |
---|---|
ClientId |
ID da aplicação (cliente) da aplicação registada. |
Instance |
Ponto de extremidade do serviço de token de segurança (STS) para o usuário autenticar. Esse valor normalmente https://login.microsoftonline.com/ é , indicando a nuvem pública do Azure. |
TenantId |
Nome do seu inquilino ou respetivo ID de inquilino (um GUID) ou common para iniciar sessão em utilizadores com contas escolares ou profissionais ou contas pessoais da Microsoft. |
O Configure()
método contém dois métodos app.UseAuthentication()
importantes e app.UseAuthorization()
, que habilitam sua funcionalidade nomeada:
// The runtime calls this method. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// more code
app.UseAuthentication();
app.UseAuthorization();
// more code
}
Protegendo um controlador, um método de controlador ou uma página Razor
Um controlador ou métodos de controlador podem ser protegidos usando o [Authorize]
atributo. Este atributo restringe o acesso ao controlador ou métodos, permitindo apenas usuários autenticados. Um desafio de autenticação pode ser iniciado para acessar o controlador se o usuário não estiver autenticado.
namespace webapi.Controllers
{
[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
Validação do âmbito no responsável pelo tratamento
O código na API verifica se os escopos necessários estão no token usando HttpContext.VerifyUserHasAnyAcceptedScope> (scopeRequiredByApi);
:
namespace webapi.Controllers
{
[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
// The web API will only accept tokens 1) for users, and 2) having the "access_as_user" scope for this API
static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);
// some code here
}
}
}
Ajuda e suporte
Se precisar de ajuda, quiser comunicar um problema ou quiser saber mais sobre as suas opções de suporte, consulte Ajuda e suporte para programadores.
Próximos passos
O repositório GitHub a seguir contém as instruções de exemplo de código da API Web ASP.NET Core e mais exemplos que mostram como obter o seguinte:
- Adicione autenticação a uma nova API Web ASP.NET Core.
- Chame a API da Web a partir de um aplicativo de desktop.
- Chame APIs downstream, como o Microsoft Graph e outras APIs da Microsoft.