Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste início rápido, protege uma API web ASP.NET Core com o Microsoft Entra ID usando o Microsoft.Identity.Web. Adiciona-se middleware de autenticação que valida os tokens portadores e restringe o acesso a chamadores autorizados.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
- .NET 9 SDK
- Um inquilino do Microsoft Entra ID. Se não tiveres, cria uma conta gratuita.
- Um registo de aplicação para a sua API
Opção 1: Criar a partir do modelo (mais rápido)
Use o modelo ASP.NET Core com autenticação Microsoft Entra integrada para estruturar um projeto de API protegida.
1. Crie o projeto
Execute os seguintes comandos para criar um novo projeto de API web com autenticação de organização única e navegue para o diretório do projeto:
dotnet new webapi --auth SingleOrg --name MyWebApi
cd MyWebApi
2. Configurar o registo da aplicação
Substitua os valores provisórios em appsettings.json pelos detalhes de registo da sua Microsoft Entra app:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id"
}
}
3. Executar a API
Inicie a candidatura:
dotnet run
A sua API está agora protegida em https://localhost:5001.
Feito! Os pedidos agora requerem um token de acesso válido.
Opção 2: Adicionar à Web API existente
Se já tem uma API web ASP.NET Core, adicione autenticação Microsoft Entra com os seguintes passos.
1. Instalar o pacote NuGet
Adicione o pacote Microsoft.Identity.Web NuGet ao seu projeto.
dotnet add package Microsoft.Identity.Web
2. Configurar autenticação em Program.cs
Registe os serviços de autenticação e autorização no pipeline de arranque da sua aplicação. O seguinte código configura a autenticação do portador JWT com validação Microsoft Entra:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
var builder = WebApplication.CreateBuilder(args);
// Add authentication
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration, "AzureAd");
// Add authorization
builder.Services.AddAuthorization();
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.UseAuthentication(); // Add authentication middleware
app.UseAuthorization();
app.MapControllers();
app.Run();
3. Adicionar configuração a appsettings.json
Adicione a secção de configuração do Microsoft Entra com os detalhes do seu tenant e da aplicação. Defina o nível de registo para Microsoft.Identity.Web para Information para ajudar a resolver problemas de validação de tokens:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Identity.Web": "Information"
}
}
}
4. Proteger os seus endpoints de API
Aplique o [Authorize] atributo a controladores ou ações que exijam um token de acesso válido.
Exigir autenticação para todos os endpoints:
O controlador seguinte requer um token de acesso válido para todas as ações e mostra como aceder às reivindicações dos utilizadores:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
[Authorize] // Require valid access token
[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
// Access user information
var userId = User.FindFirst("oid")?.Value;
var userName = User.Identity?.Name;
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = "Protected data"
});
}
}
Requerer escopos específicos:
Use o [RequiredScope] atributo para impor permissões detalhadas em ações individuais:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Identity.Web;
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class TodoController : ControllerBase
{
[HttpGet]
[RequiredScope("access_as_user")] // Require specific scope
public IActionResult GetAll()
{
return Ok(new[] { "Todo 1", "Todo 2" });
}
[HttpPost]
[RequiredScope("write")] // Different scope for write operations
public IActionResult Create([FromBody] string item)
{
return Created("", item);
}
}
5. Executar e testar
Inicie a candidatura e verifique se os pedidos não autenticados são rejeitados:
dotnet run
Teste com uma ferramenta como o Postman ou curl. Um pedido não autenticado devolve 401 Unauthorized:
curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" https://localhost:5001/api/weatherforecast
Sucesso! A sua API agora valida tokens portadores.
Configuração do registo de aplicações
Antes de a sua API validar tokens, precisa de um registo na aplicação Microsoft Entra. Siga estes passos no portal Azure.
1. Registe a sua API
- Iniciar sessão no portal Azure
- Navegue até Microsoft Entra ID>Registos de aplicações>Novo registo
- Insira um nome (por exemplo, "A Minha Web API")
- Selecionar Inquilino único (mais comum para APIs)
- Não é necessário URI de redirecionamento para APIs
- Clique em Registar
2. Expor um âmbito de API
Defina as permissões (scopes) que as aplicações clientes podem solicitar ao chamar a sua API.
- No registo da sua aplicação API, vá a Expose uma API
- Clique em Adicionar um âmbito
- Aceite o URI padrão do ID da aplicação ou personalize-o (por exemplo,
api://your-api-client-id) - Adicione um escopo:
-
Nome do âmbito:
access_as_user - Quem pode consentir: Administradores e utilizadores
- Nome de visualização do consentimento do administrador: "Aceder à minha API Web"
- Descrição do consentimento do administrador: "Permite à aplicação aceder à API web em nome do utilizador iniciado sessão"
-
Nome do âmbito:
- Clique em Adicionar âmbito
3. Note o ID da aplicação
Copie o ID da Aplicação (cliente) da página de visão geral do registo da aplicação. Este valor é o seu ClientId em appsettings.json.
Criar um registo de aplicação cliente (para testes)
Para testar a sua API protegida, registe uma aplicação cliente separada que adquira tokens e chame a API.
1. Registar uma aplicação cliente
- Em Microsoft Entra ID>Registos de aplicações, crie outro registro
- Nomeia-o (por exemplo, "O Meu Cliente API")
- Selecionar tipos de contas
- Adicionar URI de redirecionamento:
https://localhost:7000/signin-oidc(se for uma aplicação web) - Clique em Registar
2. Conceder permissões de API
Conceda à aplicação cliente permissão para chamar a sua API com os escopos que definiu.
- No registo da aplicação cliente, vá a permissões API
- Clique em Adicionar uma permissão>As Minhas APIs
- Selecione o registo da sua API
- Verifica o
access_as_useralcance - Clique em Adicionar permissões
- Clique em Conceder consentimento de administrador (se necessário)
3. Criar um segredo de cliente (para clientes confidenciais)
Se a sua aplicação cliente correr num servidor (não num navegador ou dispositivo móvel), crie um segredo cliente para autenticação.
- Ir para Certificados & segredos
- Clique em Novo segredo de cliente
- Adicionar uma descrição e uma expiração
- Clique em Adicionar
- Copie imediatamente o valor secreto – não poderá voltar a vê-lo
Teste a sua API protegida
Verifique se a sua API valida corretamente os tokens enviando pedidos autenticados.
Usando o Postman
Configura a autenticação OAuth 2.0 no Postman para adquirir um token e chamar a tua API.
- Criar um novo pedido no Postman
- Configurar autenticação OAuth 2.0:
- Tipo de Subsídio: Código de Autorização (para contexto do utilizador) ou Credenciais do Cliente (para contexto da aplicação)
-
URL de autenticação:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize -
URL do Token de Acesso:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token - ID do Cliente: ID de cliente da sua aplicação cliente
- Segredo do Cliente: O segredo da sua aplicação cliente
-
Âmbito:
api://your-api-client-id/access_as_user
- Clique em Obter Novo Token de Acesso
- Use o token para chamar a sua API
Usar código (exemplo C#)
O exemplo seguinte utiliza o MSAL.NET para adquirir um token com o fluxo de credenciais do cliente e chamar a API protegida:
// In a console app or client application
using Microsoft.Identity.Client;
var app = ConfidentialClientApplicationBuilder
.Create("client-app-id")
.WithClientSecret("client-secret")
.WithAuthority("https://login.microsoftonline.com/{tenant-id}")
.Build();
var result = await app.AcquireTokenForClient(
new[] { "api://your-api-client-id/.default" }
).ExecuteAsync();
var accessToken = result.AccessToken;
// Use the token to call your API
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", accessToken);
var response = await client.GetAsync("https://localhost:5001/api/weatherforecast");
Opções de configuração comuns
Microsoft. O Identity.Web suporta vários padrões de configuração para diferentes cenários.
Exigir escopos específicos na configuração
Em vez de usar o [RequiredScope] atributo, pode configurar os escopos necessários globalmente em:appsettings.json
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-api-client-id",
"Scopes": "access_as_user"
}
}
Aceitar tokens de múltiplos locatários
Para aceitar tokens de qualquer locatário do Microsoft Entra, defina TenantId para common:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "common",
"ClientId": "your-api-client-id"
}
}
Configurar a validação do token
Se a sua API chamar APIs a jusante (como a Microsoft Graph), ative a aquisição de tokens e configure uma cache de tokens:
builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration)
.EnableTokenAcquisitionToCallDownstreamApi() // If your API calls other APIs
.AddInMemoryTokenCaches();
Passos seguintes
Agora que tem uma API protegida, explore estes tópicos:
- Chamar APIs downstream - Chamar Microsoft Graph ou outras APIs em nome dos utilizadores.
- Configurar cache de tokens - Estratégias de cache de produção para cenários OBO.
- Processos de longa duração - Gerir trabalhos em segundo plano com tokens OBO.
- Implementar atrás de um gateway de API - API Management do Azure, Azure Front Door, Application Gateway.
Troubleshooting
401 Não autorizado
Problema: A API devolve 401 mesmo com um token.
Causas possíveis:
- A destinatário do token (
auddeclaração) não corresponde ao da sua APIClientId - O token está expirado
- Token está associado ao tenant errado
- Falta o âmbito exigido
Solução: Decifra o token no jwt.ms e verifica as reivindicações. Consulte Registo e Diagnóstico para resolução de problemas detalhada.
AADSTS50013: Assinatura inválida
Problema: A validação da assinatura do token falha.
Solução: Certifique-se de que o TenantId e o ClientId estão corretos. O token deve ser emitido pela autoridade esperada. Ative o registo detalhado para ver erros de validação.
Osciloscópios não encontrados em token
Problema:[RequiredScope] O atributo falha.
Solution:
- Verifique se a aplicação cliente tem permissão para o âmbito
- Garantir que o consentimento administrativo foi concedido (se necessário)
- Consulte o Guia de Autorização para padrões completos de validação do âmbito
- Verifique se o escopo é solicitado ao adquirir o token (por exemplo,
api://your-api/.defaultou escopos específicos)
Ver mais:Guia de Resolução de Problemas da Web API
Conteúdo relacionado
- Guia de autorização - atributo RequiredScope, políticas de autorização, filtragem de inquilinos
- Guia de personalização - Configurar opções de portadores JWT e parâmetros de validação
- Registo e diagnóstico - Resolução de problemas de autenticação com IDs de correlação
- Tutorial da API da Web protegida
- API samples