Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais em nossas perguntas frequentes.
Para autorizar o acesso a uma API Web, você só pode atender a solicitações que incluem um token de acesso válido que o Azure Active Directory B2C (Azure AD B2C) emite. Este artigo mostra como habilitar a autorização do Azure AD B2C para sua API Web. Depois de concluir as etapas neste artigo, somente os usuários que obtiverem um token de acesso válido estarão autorizados a chamar os endpoints da sua API Web.
Pré-requisitos
Antes de começar, leia um dos artigos a seguir, que abordam como configurar a autenticação para aplicativos que chamam APIs Web. Em seguida, siga as etapas neste artigo para substituir a API Web de exemplo por sua própria API Web.
- Configurar a autenticação em um aplicativo ASP.NET Core de exemplo
- Configurar a autenticação em um SPA (aplicativo de página única) de exemplo
Visão geral
A autenticação baseada em token garante que as solicitações a uma API Web incluam um token de acesso válido.
O aplicativo conclui as seguintes etapas:
Ele autentica usuários com o Azure AD B2C.
Adquire um token de acesso com as permissões necessárias (escopos) para o ponto de extremidade da API Web.
Ele passa o token de acesso como um token de portador no cabeçalho de autenticação da solicitação HTTP usando este formato:
Authorization: Bearer <access token>
A API Web conclui as seguintes etapas:
Lê o token de portador do cabeçalho de autorização na solicitação HTTP.
O sistema valida o token.
Valida as permissões (escopos) no token.
Ele lê as declarações codificadas no token (opcional).
Ele responde à solicitação HTTP.
Visão geral do registro do aplicativo
Para permitir que seu aplicativo entre com o Azure AD B2C e chame uma API Web, você precisa registrar dois aplicativos no diretório do Azure AD B2C.
O registro de aplicativos Web, móveis ou SPA habilita seu aplicativo a autenticar-se com o Azure AD B2C. O processo de registro do aplicativo gera uma ID do aplicativo, também conhecida como ID do cliente, que identifica exclusivamente seu aplicativo (por exemplo, ID do aplicativo: 1).
O registro da API Web permite que seu aplicativo chame uma API Web protegida. O registro expõe as permissões da API Web (escopos). O processo de registro do aplicativo gera uma ID do aplicativo, que identifica exclusivamente sua API Web (por exemplo, ID do aplicativo: 2). Conceda ao aplicativo (ID do aplicativo: 1) permissões para os escopos da API Web (ID do aplicativo: 2).
Os registros de aplicativo e a arquitetura do aplicativo são descritos no diagrama a seguir:
Preparar seu ambiente de desenvolvimento
Nas próximas seções, você criará um novo projeto de API Web. Selecione sua linguagem de programação, ASP.NET Core ou Node.js. Verifique se você tem um computador que está executando um dos seguintes softwares:
- Código do Visual Studio
- C# para Visual Studio Code (versão mais recente)
- SDK do .NET 5.0
Etapa 1: Criar uma API Web protegida
Crie um novo projeto de API Web. Primeiro, selecione a linguagem de programação que deseja usar, ASP.NET Core ou Node.js.
Use o comando dotnet new. O dotnet new comando cria uma nova pasta chamada TodoList com os ativos de projeto da API Web. Abra o diretório e abra o Visual Studio Code.
dotnet new webapi -o TodoList
cd TodoList
code .
Quando você for solicitado a "adicionar ativos necessários ao projeto", selecione Sim.
Etapa 2: instalar as dependências
Adicione a biblioteca de autenticação ao seu projeto de API Web. A biblioteca de autenticação analisa o cabeçalho de autenticação HTTP, valida o token e extrai declarações. Para obter mais informações, examine a documentação da biblioteca.
Para adicionar a biblioteca de autenticação, instale o pacote executando o seguinte comando:
dotnet add package Microsoft.Identity.Web
Etapa 3: Iniciar a biblioteca de autenticação
Adicione o código necessário para iniciar a biblioteca de autenticação.
Abra Startup.cs e, no início da classe, adicione as seguintes using declarações:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
Localize a função ConfigureServices(IServiceCollection services). Em seguida, antes da linha de código services.AddControllers();, adicione o seguinte trecho de código:
public void ConfigureServices(IServiceCollection services)
{
// Adds Microsoft Identity platform (Azure AD B2C) support to protect this Api
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAdB2C", options);
options.TokenValidationParameters.NameClaimType = "name";
},
options => { Configuration.Bind("AzureAdB2C", options); });
// End of the Microsoft Identity platform block
services.AddControllers();
}
Localize a função Configure. Em seguida, imediatamente após a linha de código app.UseRouting();, adicione o seguinte trecho de código:
app.UseAuthentication();
Após a alteração, seu código deve se parecer com o seguinte snippet:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
// Add the following line
app.UseAuthentication();
// End of the block you add
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Etapa 4: adicionar os pontos de extremidade
Adicione dois endpoints à API Web:
- Ponto de extremidade
/publicanônimo. Esse ponto de extremidade retorna a data e a hora atuais. Use-a para depurar sua API Web com chamadas anônimas. - Ponto de extremidade
/helloprotegido. Esse ponto de extremidade retorna o valor da declaraçãonamedentro do token de acesso.
Para adicionar o ponto de extremidade anônimo:
Na pasta /Controllers , adicione um arquivo PublicController.cs e adicione-o ao seguinte snippet de código:
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace TodoList.Controllers
{
[ApiController]
[Route("[controller]")]
public class PublicController : ControllerBase
{
private readonly ILogger<PublicController> _logger;
public PublicController(ILogger<PublicController> logger)
{
_logger = logger;
}
[HttpGet]
public ActionResult Get()
{
return Ok( new {date = DateTime.UtcNow.ToString()});
}
}
}
Para adicionar o ponto de extremidade protegido:
Na pasta /Controllers , adicione um arquivo HelloController.cs e adicione-o ao seguinte código:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web.Resource;
namespace TodoList.Controllers
{
[Authorize]
[RequiredScope("tasks.read")]
[ApiController]
[Route("[controller]")]
public class HelloController : ControllerBase
{
private readonly ILogger<HelloController> _logger;
private readonly IHttpContextAccessor _contextAccessor;
public HelloController(ILogger<HelloController> logger, IHttpContextAccessor contextAccessor)
{
_logger = logger;
_contextAccessor = contextAccessor;
}
[HttpGet]
public ActionResult Get()
{
return Ok( new { name = User.Identity.Name});
}
}
}
O HelloController controlador é decorado com o AuthorizeAttribute, que limita o acesso somente a usuários autenticados.
O controlador também é decorado com o [RequiredScope("tasks.read")]. O RequiredScopeAttribute verifica se a API Web é chamada com os escopos corretos. tasks.read
Etapa 5: Configurar o servidor Web
Em um ambiente de desenvolvimento, defina a API Web para escutar o número da porta das solicitações HTTP ou HTTPS de entrada. Neste exemplo, use a porta HTTP 6000 e a porta HTTPS 6001. O URI base da API Web será http://localhost:6000 para HTTP e https://localhost:6001 para HTTPS.
Adicione o snippet JSON a seguir ao arquivo appsettings.json .
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:6000"
},
"Https": {
"Url": "https://localhost:6001"
}
}
}
Etapa 6: Configurar a API Web
Adicione configurações a um arquivo de configuração. O arquivo contém informações sobre o provedor de identidade do Azure AD B2C. O aplicativo de API Web usa essas informações para validar o token de acesso que o aplicativo Web passa como um token de portador.
Na pasta raiz do projeto, abra o arquivo appsettings.json e adicione as seguintes configurações:
{
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "contoso.onmicrosoft.com",
"ClientId": "<web-api-app-application-id>",
"SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
"SignUpSignInPolicyId": "<your-sign-up-in-policy>"
},
// More settings here
}
No arquivo appsettings.json , atualize as seguintes propriedades:
| Seção | Chave | Valor |
|---|---|---|
| AzureAdB2C | Exemplo | A primeira parte do nome do locatário do Azure Active Directory B2C (por exemplo, https://contoso.b2clogin.com). |
| AzureAdB2C | Domínio | O nome de locatário completo do locatário do Azure Active Directory B2C (por exemplo, contoso.onmicrosoft.com). |
| AzureAdB2C | ClientId | A ID do aplicativo de API Web. No diagrama anterior, é o aplicativo com a ID do Aplicativo: 2. Para saber como obter a ID de registro do aplicativo de API Web, consulte Pré-requisitos. |
| AzureAdB2C | SignUpSignInPolicyId | Os fluxos de usuário ou a política personalizada. Para saber como obter o fluxo ou a política do usuário, consulte Pré-requisitos. |
Etapa 7: Executar e testar a API Web
Por fim, execute a API Web com as configurações de ambiente do Azure AD B2C.
No shell de comando, inicie o aplicativo Web executando o seguinte comando:
dotnet run
Você deverá ver a saída a seguir, o que significa que seu aplicativo está em execução e pronto para receber solicitações.
Now listening on: http://localhost:6000
Para interromper o programa, no shell de comando, selecione Ctrl+C. Você pode executar novamente o aplicativo usando o node app.js comando.
Dica
Como alternativa, para executar o dotnet run comando, você pode usar o depurador do Visual Studio Code. O depurador interno do Visual Studio Code ajuda a acelerar o loop de edição, compilação e depuração.
Abra um navegador e acesse http://localhost:6000/public. Na janela do navegador, você deverá ver o texto a seguir exibido, juntamente com a data e a hora atuais.
Etapa 8: Chamar a API Web do seu aplicativo
Tente acessar o endpoint de API Web protegido sem um token de acesso. Abra um navegador e acesse http://localhost:6000/hello. A API retorna uma mensagem de erro HTTP não autorizada, confirmando que a API Web está protegida com um token de portador.
Continue configurando seu aplicativo para chamar a API Web. Para obter diretrizes, consulte a seção Pré-requisitos .
Assista a este vídeo para saber mais sobre algumas práticas recomendadas ao integrar o Azure AD B2C a uma API.
Conteúdo relacionado
Obtenha o exemplo completo no GitHub:
- Obtenha a API Web usando a biblioteca de identidade da Microsoft.