Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Od 1 maja 2025 r. usługa Azure AD B2C nie będzie już dostępna do zakupu dla nowych klientów. Dowiedz się więcej w naszych często zadawanych pytaniach.
W tym artykule opisano sposób włączania, dostosowywania i ulepszania środowiska uwierzytelniania usługi Azure Active Directory B2C (Azure AD B2C) dla aplikacji internetowej.
Przed rozpoczęciem należy zapoznać się z następującymi artykułami:
- Konfigurowanie uwierzytelniania w przykładowej aplikacji internetowej
- Włącz uwierzytelnianie we własnej aplikacji internetowej.
Korzystanie z domeny niestandardowej
Za pomocą domeny niestandardowej można w pełni oznaczyć adres URL uwierzytelniania. Z perspektywy użytkownika użytkownicy pozostają w twojej domenie podczas procesu uwierzytelniania, a nie są przekierowywani do nazwy domeny b2clogin.com usługi Azure AD B2C.
Aby usunąć wszystkie odwołania do b2c w adresie URL, możesz również zastąpić nazwę dzierżawy B2C, np. contoso.onmicrosoft.com, w adresie URL żądania uwierzytelniania identyfikatorem GUID dzierżawy. Możesz na przykład zmienić wartość https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/ na https://account.contosobank.co.uk/<tenant ID GUID>/.
Aby użyć domeny niestandardowej i identyfikatora dzierżawy w adresie URL uwierzytelniania, postępuj zgodnie ze wskazówkami w temacie Włączanie domen niestandardowych. W folderze głównym projektu otwórz plik appsettings.json . Ten plik zawiera informacje o dostawcy tożsamości usługi Azure AD B2C.
W pliku appsettings.json wykonaj następujące czynności:
- Zaktualizuj wpis przy
Instanceużyciu domeny niestandardowej. -
DomainZaktualizuj wpis przy użyciu identyfikatora dzierżawy. Aby uzyskać więcej informacji, zobacz Używanie identyfikatora dzierżawy.
Poniższy kod JSON pokazuje ustawienia aplikacji przed zmianą:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "tenant-name.onmicrosoft.com",
...
}
Poniższy kod JSON pokazuje ustawienia aplikacji po zmianie:
"AzureAdB2C": {
"Instance": "https://login.contoso.com",
"Domain": "00000000-0000-0000-0000-000000000000",
...
}
Obsługa zaawansowanych scenariuszy
Metoda AddMicrosoftIdentityWebAppAuthentication w interfejsie API platformy tożsamości firmy Microsoft umożliwia deweloperom dodawanie kodu dla zaawansowanych scenariuszy uwierzytelniania lub subskrybowanie zdarzeń OpenIdConnect. Możesz na przykład zasubskrybować element OnRedirectToIdentityProvider, który umożliwia dostosowanie żądania uwierzytelniania wysyłanego przez aplikację do usługi Azure AD B2C.
Aby obsługiwać zaawansowane scenariusze, otwórz plik Startup.cs i w ConfigureServices funkcji zastąp AddMicrosoftIdentityWebAppAuthentication element następującym fragmentem kodu:
// 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;
});
Powyższy kod dodaje zdarzenie OnRedirectToIdentityProvider z odwołaniem do OnRedirectToIdentityProviderFunc metody . Dodaj następujący fragment kodu do Startup.cs klasy .
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Custom code here
// Don't remove this line
await Task.CompletedTask.ConfigureAwait(false);
}
Parametry między kontrolerem i funkcją OnRedirectToIdentityProvider można przekazać przy użyciu parametrów kontekstu.
Wstępne wypełnianie nazwy logowania
Podczas procesu logowania użytkownika, aplikacja może być skierowana do określonego użytkownika. Gdy aplikacja jest przeznaczona dla użytkownika, może określić w żądaniu login_hint autoryzacji parametr zapytania z nazwą logowania użytkownika. Usługa Azure AD B2C automatycznie wypełnia nazwę logowania, a użytkownik musi podać tylko hasło.
Aby wstępnie uzupełnić nazwę użytkownika, wykonaj następujące czynności:
Jeśli używasz zasad niestandardowych, dodaj wymagane oświadczenie wejściowe zgodnie z opisem w temacie Konfigurowanie logowania bezpośredniego.
Ukończ procedurę Zaawansowane scenariusze pomocy technicznej .
Dodaj następujący wiersz kodu do
OnRedirectToIdentityProviderfunkcji:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.LoginHint = "emily@contoso.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Przeselekcjonować dostawcę tożsamości
Jeśli skonfigurowałeś proces logowania dla swojej aplikacji, aby obejmował integrację kont społecznościowych, takich jak Facebook, LinkedIn lub Google, możesz określić parametr domain_hint. Ten parametr zapytania zawiera wskazówkę dotyczącą dostawcy tożsamości społecznościowych usługi Azure AD B2C, który powinien być używany do logowania. Jeśli na przykład aplikacja określa domain_hint=facebook.com, przepływ logowania przechodzi bezpośrednio do strony logowania w serwisie Facebook.
Aby przekierować użytkowników do zewnętrznego dostawcy tożsamości, wykonaj następujące czynności:
Sprawdź nazwę domeny zewnętrznego dostawcy tożsamości. Aby uzyskać więcej informacji, zobacz Przekierowanie logowania do dostawcy społecznościowego.
Ukończ procedurę Zaawansowane scenariusze pomocy technicznej .
OnRedirectToIdentityProviderFuncW funkcji dodaj następujący wiersz kodu doOnRedirectToIdentityProviderfunkcji:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.DomainHint = "facebook.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Określanie języka interfejsu użytkownika
Dostosowywanie języka w usłudze Azure AD B2C umożliwia przepływowi użytkownika dostosowanie różnych języków do potrzeb klientów. Aby uzyskać więcej informacji, zobacz Dostosowywanie języka.
Aby ustawić preferowany język, wykonaj następujące czynności:
Ukończ procedurę Zaawansowane scenariusze pomocy technicznej .
Dodaj następujący wiersz kodu do
OnRedirectToIdentityProviderfunkcji:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.UiLocales = "es"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Przekazywanie niestandardowego parametru ciągu zapytania
Za pomocą zasad niestandardowych można przekazać niestandardowy parametr ciągu zapytania. Dobrym przykładem przypadku użycia jest dynamiczna zmiana zawartości strony.
Aby przekazać niestandardowy parametr ciągu zapytania, wykonaj następujące czynności:
Skonfiguruj element ContentDefinitionParameters .
Ukończ procedurę Zaawansowane scenariusze pomocy technicznej .
Dodaj następujący wiersz kodu do
OnRedirectToIdentityProviderfunkcji:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.Parameters.Add("campaignId", "123"); // More code await Task.CompletedTask.ConfigureAwait(false); }
Przekaż wskazówkę dotyczącą tokenu identyfikatora
Aplikacja jednostki uzależnionej może wysyłać przychodzący token internetowy JSON (JWT) w ramach żądania autoryzacji OAuth2. Token przychodzący to wskazówka dotycząca użytkownika lub żądania autoryzacji. Usługa Azure AD B2C weryfikuje token, a następnie wyodrębnia oświadczenie.
Aby uwzględnić wskazówkę tokenu identyfikatora w żądaniu uwierzytelniania, wykonaj następujące czynności:
Ukończ procedurę Zaawansowane scenariusze pomocy technicznej .
W zasadach niestandardowych zdefiniuj profil techniczny wskazówki dotyczącej tokenu identyfikatora.
Dodaj następujący wiersz kodu do
OnRedirectToIdentityProviderfunkcji:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { // The idTokenHint variable holds your ID token context.ProtocolMessage.IdTokenHint = idTokenHint // More code await Task.CompletedTask.ConfigureAwait(false); }
Kontroler konta
Jeśli chcesz dostosować akcje SignIn, SignUp lub SignOut , zachęcamy do utworzenia własnego kontrolera. Posiadanie własnego kontrolera umożliwia przekazywanie parametrów między kontrolerem a biblioteką uwierzytelniania.
AccountController jest częścią Microsoft.Identity.Web.UI pakietu NuGet, który obsługuje akcje logowania i wylogowywanie. Implementację tej implementacji można znaleźć w bibliotece sieci Web tożsamości firmy Microsoft.
Dodawanie kontrolera konta
W projekcie programu Visual Studio kliknij prawym przyciskiem myszy folder Controllers , a następnie dodaj nowy kontroler. Wybierz pozycję MVC — pusty kontroler, a następnie podaj nazwę MyAccountController.cs.
Poniższy fragment kodu przedstawia niestandardowy MyAccountController element z akcją 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);
}
}
}
W widoku _LoginPartial.cshtml zmień link logowania do kontrolera.
<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">
Przekazywanie identyfikatora zasad usługi Azure AD B2C
Poniższy fragment kodu przedstawia niestandardowy kod MyAccountController z akcją SignIn i SignUp . Akcja przekazuje parametr o nazwie policy do biblioteki uwierzytelniania. Dzięki temu można podać prawidłowy identyfikator zasad usługi Azure AD B2C dla określonej akcji.
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);
}
W widoku _LoginPartial.cshtml zmień asp-controller wartość na MyAccountController dla innych linków uwierzytelniania, takich jak rejestracja lub edytowanie profilu.
Przekazywanie parametrów niestandardowych
Poniższy fragment kodu przedstawia niestandardowy MyAccountController element z akcją SignIn . Akcja przekazuje parametr o nazwie campaign_id do biblioteki uwierzytelniania.
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);
}
Wykonaj procedurę Zaawansowane scenariusze obsługi , a następnie w metodzie OnRedirectToIdentityProvider przeczytaj parametr niestandardowy:
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);
}
Zabezpiecz przekierowanie wylogowania
Po wylogowaniu użytkownik zostanie przekierowany do identyfikatora URI określonego w parametrze post_logout_redirect_uri , niezależnie od adresów URL odpowiedzi określonych dla aplikacji. Jednakże, jeśli zostanie przekazany prawidłowy id_token_hint i opcja Wymagaj tokenu identyfikatora w żądaniach wylogowania jest włączona, Azure AD B2C sprawdza, czy wartość post_logout_redirect_uri pasuje do jednego z skonfigurowanych identyfikatorów URI przekierowania aplikacji przed wykonaniem przekierowania. Jeśli dla aplikacji nie skonfigurowano pasującego adresu URL odpowiedzi, zostanie wyświetlony komunikat o błędzie i użytkownik nie zostanie przekierowany.
Aby zapewnić obsługę bezpiecznego przekierowania wylogowywanie w aplikacji, najpierw wykonaj kroki opisane w sekcjach Kontroler konta i Zaawansowane scenariusze pomocy technicznej . Następnie wykonaj poniższe kroki:
Na
MyAccountController.cskontrolerze dodaj akcję SignOut przy użyciu następującego fragmentu kodu:[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); }W klasie Startup.cs przeanalizuj
id_token_hintwartość i dołącz wartość do żądania uwierzytelniania. Poniższy fragment kodu pokazuje, jak przekazaćid_token_hintwartość do żądania uwierzytelniania: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); }ConfigureServicesW funkcji dodajSaveTokensopcję Kontrolery mają dostęp doid_tokenwartości:services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAdB2C", options); options.Events ??= new OpenIdConnectEvents(); options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc; options.SaveTokens = true; });W pliku konfiguracji appsettings.json dodaj ścieżkę identyfikatora URI przekierowania logowania do
SignedOutCallbackPathklucza."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>" }
W powyższym przykładzie post_logout_redirect_uri przekazane do żądania wylogowania będą mieć format: https://your-app.com/signout/<your-sign-up-in-policy>. Ten adres URL należy dodać do adresu URL odpowiedzi rejestracji aplikacji.
Kontrola dostępu oparta na rolach
Korzystając z autoryzacji w programie ASP.NET Core , możesz sprawdzić, czy użytkownicy mają uprawnienia dostępu do chronionego zasobu przy użyciu jednej z następujących metod:
W metodzie ConfigureServices dodaj metodę AddAuthorization , która dodaje model autoryzacji. Poniższy przykład tworzy zasady o nazwie EmployeeOnly. Zasady sprawdzają, czy oświadczenie EmployeeNumber istnieje. Wartość oświadczenia musi być jednym z następujących identyfikatorów: 1, 2, 3, 4 lub 5.
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
Autoryzację można kontrolować w ASP.NET Core przy użyciu atrybutu AuthorizeAttribute i jego różnych parametrów. W najbardziej podstawowej formie stosowanie atrybutu Authorize do kontrolera, akcji lub strony Razor ogranicza dostęp do uwierzytelnionych użytkowników tego składnika.
Zasady są stosowane do kontrolerów przy użyciu atrybutu Authorize z nazwą zasad. Poniższy kod ogranicza dostęp do Claims akcji użytkownikom autoryzowanym przez EmployeeOnly zasady:
[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
return View();
}
Dalsze kroki
- Aby dowiedzieć się więcej na temat autoryzacji, zobacz Wprowadzenie do autoryzacji w programie ASP.NET Core.