Aracılığıyla paylaş


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:

Ö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:

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:

  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, 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.comoturum 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:

  1. 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.

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

  3. işlevine OnRedirectToIdentityProviderFunc aşağıdaki kod OnRedirectToIdentityProvider 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ırma.

  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 istemenizdir.

Özel bir 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 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:

  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ç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:

  1. 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);
    }
    
  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 kimlik doğrulama isteğine nasıl geçir id_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);
    }
    
  3. işlevinde ConfigureServicesDenetleyiciler'in değere id_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;
        });
    
  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 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ı 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 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