Aracılığıyla paylaş


Azure AD B2C kullanarak web uygulamasında kimlik doğrulama seçeneklerini etkinleştirme

Önemli

1 Mayıs 2025 tarihinden itibaren Azure AD B2C artık yeni müşteriler için satın alınamayacak. SSS bölümünden daha fazla bilgi edinebilirsiniz.

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 makaleler hakkında bilgi sahibi olmanız önemlidir:

Özel bir etki alanı kullanın

Özel bir etki alanı kullanarak kimlik doğrulama URL'sini tamamen markalayabilirsiniz. Kullanıcı perspektifinden bakıldığında, kullanıcılar kimlik doğrulama işlemi sırasında Azure AD B2C b2clogin.com alan adına yönlendirilmeden kendi alan adınızda kalır.

URL'de tüm "b2c" referanslarını kaldırmak için, kimlik doğrulama isteği URL'sindeki B2C kiracı adınızı, contoso.onmicrosoft.com yerine kiracı kimliği GUID'niz ile değiştirebilirsiniz. Örneğin, https://fabrikamb2c.b2clogin.com/contoso.onmicrosoft.com/https://account.contosobank.co.uk/<tenant ID GUID>/ olarak değiştirebilirsiniz.

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:

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öntem, 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 ConfigureServices işlevini 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 doldurmak için aşağıdakileri yapın:

  1. Özel bir ilke kullanıyorsanız, Doğrudan oturum açmayı ayarlama bölümünde açıklandığı gibi gerekli giriş beyanını ekleyin.

  2. Gelişmiş senaryoları destekleme yordamını tamamlayın.

  3. İş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, Azure AD B2C'ye oturum açmak için kullanılması gereken sosyal kimlik sağlayıcısı hakkında bir ipucu sağlar. Örneğin, uygulama belirtirse domain_hint=facebook.comoturum açma akışı doğrudan Facebook oturum açma sayfasına gider.

Kullanıcıları bir dış kimlik sağlayıcısına yönlendirmek için aşağıdakileri yapın:

  1. Dış kimlik sağlayıcınızın alan adını denetleyin. Daha fazla bilgi için bkz. Oturum açmayı sosyal bir sağlayıcıyayönlendirme.

  2. Gelişmiş senaryoları destekleme yordamını tamamlayın.

  3. işlevinde OnRedirectToIdentityProviderFunc , işleve OnRedirectToIdentityProvider aşağıdaki kod 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:

  1. Dil özelleştirmesini yapılandırın.

  2. Gelişmiş senaryoları destekleme yordamını tamamlayın.

  3. İş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 istediğiniz durumlardır.

Özel sorgu dizesi parametresi geçirmek için aşağıdakileri yapın:

  1. ContentDefinitionParameters öğesini yapılandırın.

  2. Gelişmiş senaryoları destekleme yordamını tamamlayın.

  3. İş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 sağla

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:

  1. Gelişmiş senaryoları destekleme yordamını tamamlayın.

  2. Özel ilkenizde bir kimlik belirteci ipucu teknik profili tanımlayın.

  3. İş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çirmenizi sağlar. 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ı belirtin.

Aşağıdaki kod parçacığıMyAccountController eylemiyle bir özel öğ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, denetleyicinizle 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ığı, MyAccountController ve SignUp eylemiyle bir özel öğe gösterir. Eylem, kimlik doğrulama kitaplığına adlı policy bir parametre geçirir. Bu, belirli bir 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ı için değerini asp-controller olarak değiştirinMyAccountController.

Özel parametreleri geçirme

Aşağıdaki kod parçacığıMyAccountController eylemiyle bir özel öğ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önlendirmesini güvenli hale getirin

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 ileti geçirilirse ve oturum kapatma isteklerinde Kimlik Belirteci Gerektir seçeneği 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 Destek gelişmiş senaryoları bölümündeki adımları izleyin. Ardından aşağıdaki adımları izleyin:

  1. Denetleyicide MyAccountController.cs , aşağıdaki kod parçacığını kullanarak bir SignOut 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);
    }
    
  2. 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 id_token_hint kimlik doğrulama isteğine nasıl geçir 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);
    }
    
  3. işlevinde ConfigureServicesSaveTokens değerine erişebilir seçeneğini ekleyinid_token:

    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
        .AddMicrosoftIdentityWebApp(options =>
        {
            Configuration.Bind("AzureAdB2C", options);
            options.Events ??= new OpenIdConnectEvents();        
            options.Events.OnRedirectToIdentityProviderForSignOut += OnRedirectToIdentityProviderForSignOutFunc;
            options.SaveTokens = true;
        });
    
  4. 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'daki yetkilendirmeyle, aşağıdaki yöntemlerden birini kullanarak kullanıcıların 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ı EmployeeOnlybir 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'da AuthorizeAttribute ve çeşitli parametrelerini kullanarak denetleyebilirsiniz. En temel biçimiyle, ö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