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.
Este artigo descreve como habilitar, personalizar e aprimorar a experiência de autenticação do Azure AD B2C (Azure Active Directory B2C) para seu aplicativo Web.
Antes de começar, é importante familiarizar-se com os seguintes artigos:
- Configurar a autenticação em um aplicativo Web de exemplo
- Habilite a autenticação em seu próprio aplicativo Web.
Usar um domínio personalizado
Usando um domínio personalizado, você pode marcar totalmente a URL de autenticação. Do ponto de vista do usuário, os usuários permanecem em seu domínio durante o processo de autenticação, em vez de serem redirecionados para o Azure AD B2C b2clogin.com nome de domínio.
Para remover todas as referências a “b2c” no URL, você também pode substituir o nome do locatário b2c, contoso.onmicrosoft.com, no URL de solicitação de autenticação pelo GUID da ID do locatário. Por exemplo, você pode alterar https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/
para https://account.contosobank.co.uk/<tenant ID GUID>/
.
Para usar um domínio personalizado e sua ID de locatário na URL de autenticação, siga as diretrizes em Habilitar domínios personalizados. Na pasta raiz do projeto, abra o arquivo appsettings.json. Este arquivo contém informações sobre o provedor de identidade do Azure AD B2C.
No arquivo appsettings.json , faça o seguinte:
- Atualize a
Instance
entrada com seu domínio personalizado. - Atualize a
Domain
entrada com sua ID de locatário. Para obter mais informações, consulte Usar a ID do locatário.
O JSON a seguir mostra as configurações do aplicativo antes da alteração:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "tenant-name.onmicrosoft.com",
...
}
O JSON a seguir mostra as configurações do aplicativo após a alteração:
"AzureAdB2C": {
"Instance": "https://login.contoso.com",
"Domain": "00000000-0000-0000-0000-000000000000",
...
}
Dar suporte a cenários avançados
O AddMicrosoftIdentityWebAppAuthentication
método na API da plataforma de identidade da Microsoft permite que os desenvolvedores adicionem código para cenários avançados de autenticação ou assinem eventos OpenIdConnect. Por exemplo, você pode assinar o OnRedirectToIdentityProvider, que permite personalizar a solicitação de autenticação que seu aplicativo envia ao Azure AD B2C.
Para dar suporte a cenários avançados, abra o arquivo Startup.cs e, na ConfigureServices
função, substitua AddMicrosoftIdentityWebAppAuthentication
pelo seguinte snippet de código:
// Configuration to sign-in users with Azure AD B2C
//services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C");
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(options =>
{
Configuration.Bind("AzureAdB2C", options);
options.Events ??= new OpenIdConnectEvents();
options.Events.OnRedirectToIdentityProvider += OnRedirectToIdentityProviderFunc;
});
O código anterior adiciona o evento OnRedirectToIdentityProvider com uma referência ao OnRedirectToIdentityProviderFunc
método. Adicione o snippet de código a seguir à Startup.cs
classe.
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Custom code here
// Don't remove this line
await Task.CompletedTask.ConfigureAwait(false);
}
Você pode passar parâmetros entre o controlador e a OnRedirectToIdentityProvider
função usando parâmetros de contexto.
Preencher previamente o nome de usuário
Durante uma jornada de sign-in do usuário, seu aplicativo pode focar em um usuário específico. Quando um aplicativo tem como destino um usuário, ele pode especificar na solicitação de autorização o login_hint
parâmetro de consulta com o nome de entrada do usuário. O Azure AD B2C preenche automaticamente o nome de entrada e o usuário precisa fornecer apenas a senha.
Para preencher o nome de logon, faça o seguinte:
Se você estiver usando uma política personalizada, adicione a declaração de entrada necessária, conforme descrito em Configurar conexão direta.
Conclua o procedimento de cenários avançados de suporte .
Adicione a seguinte linha de código à
OnRedirectToIdentityProvider
função:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.LoginHint = "emily@contoso.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Pré-selecionar um provedor de identidade
Se você configurou o percurso de entrada do aplicativo para incluir contas sociais, como Facebook, LinkedIn ou Google, poderá especificar o domain_hint
parâmetro. Esse parâmetro de consulta fornece uma dica para o Azure AD B2C sobre o provedor de identidade social que deve ser usado para entrar. Por exemplo, se o aplicativo especificar domain_hint=facebook.com
, o fluxo de entrada vai diretamente para a página de entrada do Facebook.
Para redirecionar usuários para um provedor de identidade externo, faça o seguinte:
Verifique o nome de domínio do provedor de identidade externo. Para obter mais informações, consulte Redirecionar o login para um provedor social.
Conclua o procedimento de cenários avançados de suporte .
OnRedirectToIdentityProviderFunc
Na função, adicione a seguinte linha de código àOnRedirectToIdentityProvider
função:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.DomainHint = "facebook.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Especificar o idioma da interface do usuário
A personalização de idiomas no Azure AD B2C permite que seu fluxo de usuário acomode uma variedade de idiomas para atender às necessidades dos clientes. Para obter mais informações, consulte Personalização de idioma.
Para definir o idioma preferencial, faça o seguinte:
Conclua o procedimento de cenários avançados de suporte .
Adicione a seguinte linha de código à
OnRedirectToIdentityProvider
função:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.UiLocales = "es"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Passar um parâmetro de cadeia de caracteres de consulta personalizado
Com políticas personalizadas, você pode passar um parâmetro de cadeia de caracteres de consulta personalizado. Um bom exemplo de caso de uso é quando você deseja alterar dinamicamente o conteúdo da página.
Para passar um parâmetro de cadeia de caracteres de consulta personalizada, faça o seguinte:
Configure o elemento ContentDefinitionParameters .
Conclua o procedimento de cenários avançados de suporte .
Adicione a seguinte linha de código à
OnRedirectToIdentityProvider
função:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.Parameters.Add("campaignId", "123"); // More code await Task.CompletedTask.ConfigureAwait(false); }
Passar uma dica de token de ID
Um aplicativo de terceira parte confiável pode enviar um JWT (Token Web JSON) de entrada como parte da solicitação de autorização OAuth2. O token de entrada é uma dica sobre o usuário ou a solicitação de autorização. O Azure AD B2C valida o token e, em seguida, extrai a declaração.
Para incluir uma dica de token de ID na solicitação de autenticação, faça o seguinte:
Conclua o procedimento de cenários avançados de suporte .
Em sua política personalizada, defina um perfil técnico de dica de token de ID.
Adicione a seguinte linha de código à
OnRedirectToIdentityProvider
função:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { // The idTokenHint variable holds your ID token context.ProtocolMessage.IdTokenHint = idTokenHint // More code await Task.CompletedTask.ConfigureAwait(false); }
Controlador de conta
Se você quiser personalizar as ações SignIn, SignUp ou SignOut , recomendamos que você crie seu próprio controlador. Ter seu próprio controlador permite que você passe parâmetros entre o controlador e a biblioteca de autenticação.
AccountController
faz parte do Microsoft.Identity.Web.UI
pacote NuGet, que manipula as ações de entrada e saída. Você pode encontrar sua implementação na biblioteca da Web de Identidade da Microsoft.
Adicionar o controlador de conta
No projeto do Visual Studio, clique com o botão direito do mouse na pasta Controladores e adicione um novo Controlador. Selecione MVC – Controlador Vazio e forneça o nome MyAccountController.cs.
O snippet de código a seguir demonstra um personalizado MyAccountController
com a ação SignIn .
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace mywebapp.Controllers
{
[AllowAnonymous]
[Area("MicrosoftIdentity")]
[Route("[area]/[controller]/[action]")]
public class MyAccountController : Controller
{
[HttpGet("{scheme?}")]
public IActionResult SignIn([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
return Challenge(properties, scheme);
}
}
}
No modo de exibição _LoginPartial.cshtml , altere o link de entrada para o controlador.
<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">
Passar a ID da política do Azure AD B2C
O snippet de código a seguir demonstra um personalizado MyAccountController
com a ação SignIn e SignUp . A ação passa um parâmetro nomeado policy
para a biblioteca de autenticação. Isso permite que você forneça a ID de política do Azure AD B2C correta para a ação específica.
public IActionResult SignIn([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items["policy"] = "B2C_1_SignIn";
return Challenge(properties, scheme);
}
public IActionResult SignUp([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items["policy"] = "B2C_1_SignUp";
return Challenge(properties, scheme);
}
No modo de exibição _LoginPartial.cshtml , altere o asp-controller
valor para MyAccountController
qualquer outro link de autenticação, como inscrever-se ou editar perfil.
Passar parâmetros personalizados
O snippet de código a seguir demonstra um personalizado MyAccountController
com a ação SignIn . A ação passa um parâmetro nomeado campaign_id
para a biblioteca de autenticação.
public IActionResult SignIn([FromRoute] string scheme)
{
scheme ??= OpenIdConnectDefaults.AuthenticationScheme;
var redirectUrl = Url.Content("~/");
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
properties.Items["policy"] = "B2C_1_SignIn";
properties.Items["campaign_id"] = "1234";
return Challenge(properties, scheme);
}
Conclua o procedimento de cenários avançados de suporte e, no OnRedirectToIdentityProvider
método, leia o parâmetro personalizado:
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Read the custom parameter
var campaign_id = context.Properties.Items.FirstOrDefault(x => x.Key == "campaign_id").Value;
// Add your custom code here
if (campaign_id != null)
{
// Send parameter to authentication request
context.ProtocolMessage.SetParameter("campaign_id", campaign_id);
}
await Task.CompletedTask.ConfigureAwait(false);
}
Proteger seu redirecionamento de logoff
Após o logoff, o usuário é redirecionado para o URI especificado no post_logout_redirect_uri
parâmetro, independentemente das URLs de resposta especificadas para o aplicativo. No entanto, se um válido id_token_hint
for passado e o Token de ID Obrigatório em solicitações de logoff estiver ativado, o Azure AD B2C verificará se o valor corresponde post_logout_redirect_uri
a um dos URIs de redirecionamento configurados do aplicativo antes de executar o redirecionamento. Se nenhuma URL de resposta correspondente tiver sido configurada para o aplicativo, uma mensagem de erro será exibida e o usuário não será redirecionado.
Para dar suporte a um redirecionamento de logoff seguro em seu aplicativo, primeiro siga as etapas nas seções Controlador de Conta e Suporte a cenários avançados . Em seguida, siga as etapas abaixo:
No
MyAccountController.cs
controlador, adicione uma ação SignOut usando o seguinte snippet de código:[HttpGet("{scheme?}")] public async Task<IActionResult> SignOutAsync([FromRoute] string scheme) { scheme ??= OpenIdConnectDefaults.AuthenticationScheme; //obtain the id_token var idToken = await HttpContext.GetTokenAsync("id_token"); //send the id_token value to the authentication middleware properties.Items["id_token_hint"] = idToken; return SignOut(properties,CookieAuthenticationDefaults.AuthenticationScheme,scheme); }
Na classe Startup.cs , analise o
id_token_hint
valor e acrescente o valor à solicitação de autenticação. O snippet de código a seguir demonstra como passar oid_token_hint
valor para a solicitação de autenticação:private async Task OnRedirectToIdentityProviderForSignOutFunc(RedirectContext context) { var id_token_hint = context.Properties.Items.FirstOrDefault(x => x.Key == "id_token_hint").Value; if (id_token_hint != null) { // Send parameter to authentication request context.ProtocolMessage.SetParameter("id_token_hint", id_token_hint); } await Task.CompletedTask.ConfigureAwait(false); }
ConfigureServices
Na função, adicione a opçãoSaveTokens
para controladores ter acesso aoid_token
valor:services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAdB2C", options); options.Events ??= new OpenIdConnectEvents(); options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc; options.SaveTokens = true; });
No arquivo de configuraçãoappsettings.json, adicione o caminho do URI de redirecionamento de logoff à
SignedOutCallbackPath
chave."AzureAdB2C": { "Instance": "https://<your-tenant-name>.b2clogin.com", "ClientId": "<web-app-application-id>", "Domain": "<your-b2c-domain>", "SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>", "SignUpSignInPolicyId": "<your-sign-up-in-policy>" }
No exemplo acima, o post_logout_redirect_uri passado para a solicitação de logoff estará no formato: https://your-app.com/signout/<your-sign-up-in-policy>
. Essa URL deve ser adicionada às URLs de resposta do Registro de Aplicativo.
Controle de acesso baseado em função
Com a autorização no ASP.NET Core, você pode verificar se os usuários estão autorizados a acessar um recurso protegido usando um dos seguintes métodos:
ConfigureServices
No método, adicione o AddAuthorization
método, que adiciona o modelo de autorização. O exemplo a seguir cria uma política chamada EmployeeOnly
. A política verifica se existe uma declaração EmployeeNumber
. O valor da declaração deve ser uma das seguintes IDs: 1, 2, 3, 4 ou 5.
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
Você controla a autorização no ASP.NET Core usando AuthorizeAttribute e seus vários parâmetros. Em sua forma mais básica, aplicar o Authorize
atributo a um controlador, ação ou Página Razor limita o acesso aos usuários autenticados desse componente.
Você aplica políticas aos controladores usando o Authorize
atributo com o nome da política. O código a seguir limita o acesso à ação Claims
aos usuários autorizados pela EmployeeOnly
política:
[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
return View();
}
Próximas etapas
- Para saber mais sobre autorização, consulte Introdução à autorização no ASP.NET Core.