Azure AD B2C kullanarak web uygulamasında kimlik doğrulama seçeneklerini etkinleştirme
Bu makalede, web uygulamanız için Azure Active Directory B2C (Azure AD B2C) kimlik doğrulama deneyimini etkinleştirme, özelleştirme ve geliştirme işlemleri açıklanır.
Başlamadan önce aşağıdaki makalelere alışmak önemlidir:
- Örnek web uygulamasında kimlik doğrulamasını yapılandırma
- Kendi web uygulamanızda kimlik doğrulamasını etkinleştirin.
Özel etki alanı kullanma
Özel bir etki alanı kullanarak kimlik doğrulama URL'sini tamamen markalayabilirsiniz. Kullanıcı açısından bakıldığında, kullanıcılar kimlik doğrulama işlemi sırasında Azure AD B2C b2clogin.com etki alanı adına yönlendirilmek yerine etki alanınızda kalır.
URL'deki "b2c" öğesine yapılan tüm başvuruları kaldırmak için, kimlik doğrulama isteği URL'sindeki B2C kiracı adınızı contoso.onmicrosoft.com kiracı kimliği GUID'nizle de değiştirebilirsiniz. Örneğin, olarak değiştirebilirsiniz https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/
https://account.contosobank.co.uk/<tenant ID GUID>/
.
Kimlik doğrulama URL'sinde özel bir etki alanı ve kiracı kimliğinizi kullanmak için Özel etki alanlarını etkinleştirme başlığındaki yönergeleri izleyin. Proje kök klasörünün altında appsettings.json dosyasını açın. Bu dosya, Azure AD B2C kimlik sağlayıcınız hakkında bilgi içerir.
appsettings.json dosyasında aşağıdakileri yapın:
- Girdiyi
Instance
özel etki alanınızla güncelleştirin. - Girdiyi
Domain
kiracı kimliğiniz ile güncelleştirin. Daha fazla bilgi için bkz. Kiracı kimliğini kullanma.
Aşağıdaki JSON, değişiklik öncesinde uygulama ayarlarını gösterir:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "tenant-name.onmicrosoft.com",
...
}
Aşağıdaki JSON, değişiklik sonrasında uygulama ayarlarını gösterir:
"AzureAdB2C": {
"Instance": "https://login.contoso.com",
"Domain": "00000000-0000-0000-0000-000000000000",
...
}
Gelişmiş senaryoları destekleme
AddMicrosoftIdentityWebAppAuthentication
Microsoft kimlik platformu API'sindeki yöntemi, geliştiricilerin gelişmiş kimlik doğrulama senaryoları için kod eklemesine veya OpenIdConnect olaylarına abone olmasını sağlar. Örneğin, uygulamanızın Azure AD B2C'ye gönderdiği kimlik doğrulama isteğini özelleştirmenizi sağlayan OnRedirectToIdentityProvider'a abone olabilirsiniz.
Gelişmiş senaryoları desteklemek için Startup.cs dosyasını açın ve işlevinde ConfigureServices
değerini aşağıdaki kod parçacığıyla değiştirin AddMicrosoftIdentityWebAppAuthentication
:
// 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;
});
Yukarıdaki kod, yöntemine bir başvuru OnRedirectToIdentityProviderFunc
ile OnRedirectToIdentityProvider olayını ekler. Sınıfına aşağıdaki kod parçacığını Startup.cs
ekleyin.
private async Task OnRedirectToIdentityProviderFunc(RedirectContext context)
{
// Custom code here
// Don't remove this line
await Task.CompletedTask.ConfigureAwait(false);
}
Bağlam parametrelerini kullanarak denetleyicinizle OnRedirectToIdentityProvider
işlev arasında parametre geçirebilirsiniz.
Oturum açma adını önceden doldurma
Oturum açma kullanıcı yolculuğu sırasında uygulamanız belirli bir kullanıcıyı hedef alabilir. Bir uygulama bir kullanıcıyı hedeflediğinde, yetkilendirme isteğinde login_hint
kullanıcının oturum açma adıyla sorgu parametresini belirtebilir. Azure AD B2C oturum açma adını otomatik olarak doldurur ve kullanıcının yalnızca parolayı sağlaması gerekir.
Oturum açma adını önceden doldurulmak için aşağıdakileri yapın:
Özel bir ilke kullanıyorsanız, doğrudan oturum açmayı ayarlama bölümünde açıklandığı gibi gerekli giriş beyanını ekleyin.
Gelişmiş senaryoları destekleme yordamını tamamlayın.
İşleve aşağıdaki kod
OnRedirectToIdentityProvider
satırını ekleyin:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.LoginHint = "emily@contoso.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Kimlik sağlayıcısını önceden seçme
Uygulamanızın oturum açma yolculuğunu Facebook, LinkedIn veya Google gibi sosyal hesapları içerecek şekilde yapılandırdıysanız parametresini domain_hint
belirtebilirsiniz. Bu sorgu parametresi, oturum açmak için kullanılması gereken sosyal kimlik sağlayıcısı hakkında B2C'yi Azure AD için bir ipucu sağlar. Örneğin, uygulama belirtirse domain_hint=facebook.com
oturum açma akışı doğrudan Facebook oturum açma sayfasına gider.
Kullanıcıları dış kimlik sağlayıcısına yönlendirmek için aşağıdakileri yapın:
Dış kimlik sağlayıcınızın etki alanı adını denetleyin. Daha fazla bilgi için bkz. Oturum açmayı sosyal hizmet sağlayıcısına yeniden yönlendirme.
Gelişmiş senaryoları destekleme yordamını tamamlayın.
işlevine
OnRedirectToIdentityProviderFunc
aşağıdaki kodOnRedirectToIdentityProvider
satırını ekleyin:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.DomainHint = "facebook.com"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Kullanıcı arabirimi dilini belirtme
Azure AD B2C'de dil özelleştirmesi, kullanıcı akışınızın müşterilerinizin ihtiyaçlarına uygun çeşitli dilleri barındırmasını sağlar. Daha fazla bilgi için bkz . Dil özelleştirme.
Tercih edilen dili ayarlamak için aşağıdakileri yapın:
Gelişmiş senaryoları destekleme yordamını tamamlayın.
İşleve aşağıdaki kod
OnRedirectToIdentityProvider
satırını ekleyin:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.UiLocales = "es"; // More code await Task.CompletedTask.ConfigureAwait(false); }
Özel sorgu dizesi parametresi geçirme
Özel ilkelerle, özel bir sorgu dizesi parametresi geçirebilirsiniz. İyi bir kullanım örneği, sayfa içeriğini dinamik olarak değiştirmek istemenizdir.
Özel bir sorgu dizesi parametresi geçirmek için aşağıdakileri yapın:
ContentDefinitionParameters öğesini yapılandırın.
Gelişmiş senaryoları destekleme yordamını tamamlayın.
İşleve aşağıdaki kod
OnRedirectToIdentityProvider
satırını ekleyin:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { context.ProtocolMessage.Parameters.Add("campaignId", "123"); // More code await Task.CompletedTask.ConfigureAwait(false); }
Kimlik belirteci ipucu geçirme
Bağlı olan taraf uygulaması, OAuth2 yetkilendirme isteğinin bir parçası olarak bir gelen JSON Web Belirteci (JWT) gönderebilir. Gelen belirteç, kullanıcı veya yetkilendirme isteği hakkında bir ipucudur. Azure AD B2C belirteci doğrular ve ardından talebi ayıklar.
Kimlik doğrulama isteğine kimlik belirteci ipucu eklemek için aşağıdakileri yapın:
Gelişmiş senaryoları destekleme yordamını tamamlayın.
Özel ilkenizde bir kimlik belirteci ipucu teknik profili tanımlayın.
İşleve aşağıdaki kod
OnRedirectToIdentityProvider
satırını ekleyin:private async Task OnRedirectToIdentityProviderFunc(RedirectContext context) { // The idTokenHint variable holds your ID token context.ProtocolMessage.IdTokenHint = idTokenHint // More code await Task.CompletedTask.ConfigureAwait(false); }
Hesap denetleyicisi
SignIn, SignUp veya SignOut eylemlerini özelleştirmek istiyorsanız, kendi denetleyicinizi oluşturmanızı öneririz. Kendi denetleyicinizin olması, denetleyicinizle kimlik doğrulama kitaplığı arasında parametre geçirmenize olanak tanır.
AccountController
, oturum açma ve oturum kapatma eylemlerini işleyen NuGet paketinin bir parçasıdır Microsoft.Identity.Web.UI
. Uygulamasını Microsoft Identity Web kitaplığında bulabilirsiniz.
Hesap denetleyicisini ekleme
Visual Studio projenizde Denetleyiciler klasörüne sağ tıklayın ve yeni bir Denetleyici ekleyin. MVC - Boş Denetleyici'yi seçin ve myAccountController.cs adını girin.
Aşağıdaki kod parçacığı, SignIn eylemiyle bir özel MyAccountController
öğe gösterir.
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);
}
}
}
_LoginPartial.cshtml görünümünde, denetleyicinizin oturum açma bağlantısını değiştirin.
<form method="get" asp-area="MicrosoftIdentity" asp-controller="MyAccount" asp-action="SignIn">
Azure AD B2C ilke kimliğini geçirme
Aşağıdaki kod parçacığı, SignIn ve SignUp eylemiyle bir özel MyAccountController
öğe gösterir. Eylem, kimlik doğrulama kitaplığına adlı policy
bir parametre geçirir. Bu, belirli eylem için doğru Azure AD B2C ilke kimliğini sağlamanıza olanak tanır.
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);
}
_LoginPartial.cshtml görünümünde, kaydolma veya profil düzenleme gibi diğer kimlik doğrulama bağlantılarının asp-controller
değerini MyAccountController
olarak değiştirin.
Özel parametreleri geçirme
Aşağıdaki kod parçacığı, SignIn eylemiyle bir özel MyAccountController
öğe gösterir. Eylem, kimlik doğrulama kitaplığına adlı campaign_id
bir parametre geçirir.
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);
}
Gelişmiş senaryoları destekle yordamını tamamlayın ve yönteminde OnRedirectToIdentityProvider
özel parametreyi okuyun:
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);
}
Oturumu kapatma yeniden yönlendirmenizin güvenliğini sağlama
Oturumu kapatıldıktan sonra kullanıcı, uygulama için belirtilen yanıt URL'lerinden bağımsız olarak parametresinde post_logout_redirect_uri
belirtilen URI'ye yönlendirilir. Ancak geçerli id_token_hint
bir geçiş yapılırsa ve oturum kapatma isteklerinde Kimlik Belirteci Gerektir açıksa Azure AD B2C, yeniden yönlendirmeyi gerçekleştirmeden önce değerinin post_logout_redirect_uri
uygulamanın yapılandırılmış yeniden yönlendirme URI'lerinden biriyle eşleşip eşleşmediğini doğrular. Uygulama için eşleşen yanıt URL'si yapılandırılmadıysa, bir hata iletisi görüntülenir ve kullanıcı yeniden yönlendirılmaz.
Uygulamanızda güvenli bir oturum kapatma yeniden yönlendirmesini desteklemek için önce Hesap denetleyicisi ve Gelişmiş senaryoları destekleme bölümlerindeki adımları izleyin. Ardından aşağıdaki adımları izleyin:
Denetleyicide
MyAccountController.cs
, aşağıdaki kod parçacığını kullanarak bir Oturum Kapatma eylemi ekleyin:[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); }
Startup.cs sınıfında değeri ayrıştırın
id_token_hint
ve değeri kimlik doğrulama isteğine ekleyin. Aşağıdaki kod parçacığı, değerin kimlik doğrulama isteğine nasıl geçirid_token_hint
yapılacağını gösterir: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); }
işlevinde
ConfigureServices
Denetleyiciler'in değereid_token
erişimi var seçeneğini ekleyinSaveTokens
:services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(options => { Configuration.Bind("AzureAdB2C", options); options.Events ??= new OpenIdConnectEvents(); options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc; options.SaveTokens = true; });
appsettings.json yapılandırma dosyasında oturum kapatma yeniden yönlendirme URI'nizin yolunu key'e
SignedOutCallbackPath
ekleyin."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>" }
Yukarıdaki örnekte, oturumu kapatma isteğine geçirilen post_logout_redirect_uri şu biçimde olacaktır: https://your-app.com/signout/<your-sign-up-in-policy>
. Bu URL, Uygulama Kaydı'nın yanıt URL'lerine eklenmelidir.
Rol tabanlı erişim denetimi
ASP.NET Core yetkilendirme ile, kullanıcıların aşağıdaki yöntemlerden birini kullanarak korumalı bir kaynağa erişme yetkisi olup olmadığını kontrol edebilirsiniz:
yönteminde ConfigureServices
yetkilendirme modelini ekleyen yöntemini ekleyin AddAuthorization
. Aşağıdaki örnek adlı EmployeeOnly
bir ilke oluşturur. İlke, bir talebin EmployeeNumber
var olduğunu doğrulamak için denetler. Talebin değeri şu kimliklerden biri olmalıdır: 1, 2, 3, 4 veya 5.
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
Yetkilendirmeyi ASP.NET Core AuthorizeAttribute ve çeşitli parametrelerini kullanarak denetleyebilirsiniz. En temel biçiminde, özniteliği bir Authorize
denetleyiciye, eyleme veya Razor Sayfasına uygulamak, bu bileşenin kimliği doğrulanmış kullanıcılarına erişimi sınırlar.
İlke adıyla özniteliğini Authorize
kullanarak denetleyicilere ilke uygularsınız. Aşağıdaki kod, eyleme Claims
erişimi ilke tarafından yetkilendirilmiş kullanıcılarla EmployeeOnly
sınırlar:
[Authorize(Policy = "EmployeeOnly")]
public IActionResult Claims()
{
return View();
}
Sonraki adımlar
- Yetkilendirme hakkında daha fazla bilgi edinmek için bkz. ASP.NET Core'da yetkilendirmeye giriş.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin