ASP.NET Core'da Azure Active Directory B2C ile bulut kimlik doğrulaması

Tarafından Damien Bod

Azure Active Directory B2C (Azure AD B2C), web ve mobil uygulamalar için bir bulut kimlik yönetimi çözümüdür. Hizmet, bulutta ve şirket içinde barındırılan uygulamalar için kimlik doğrulaması sağlar. Kimlik doğrulama türleri tek tek hesapları, sosyal ağ hesaplarını ve federasyon kurumsal hesaplarını içerir. Ayrıca Azure AD B2C, çok az yapılandırmayla çok faktörlü kimlik doğrulaması sağlayabilir.

İpucu

Microsoft Entra Id, Microsoft Entra Dış Kimlik ve Azure AD B2C ayrı ürün teklifleridir. Entra Id kiracısı genellikle bir kuruluşu temsil ederken Azure AD B2C kiracısı veya Microsoft Entra Dış Kimlik kiracısı, bağlı olan taraf uygulamalarla kullanılacak kimlik koleksiyonunu temsil edebilir. Daha fazla bilgi edinmek için bkz . Azure AD B2C: Sık sorulan sorular (SSS).

İpucu

Müşteriler için Microsoft Entra Dış Kimlik Microsoft'un yeni müşteri kimliği ve erişim yönetimi (CIAM) çözümüdür.

Bu öğreticide, Azure AD B2C ile kimlik doğrulaması için bir ASP.NET Core uygulamasını yapılandırmayı öğreneceksiniz.

Önkoşullar

Hazırlık

  1. Azure Active Directory B2C kiracısı oluşturun.

  2. Yeni bir ASP.NET Core Razor sayfaları uygulaması oluşturun:

    dotnet new razor -o azure-ad-b2c
    

    Önceki komut, azure-ad-b2c adlı bir dizinde bir sayfalar uygulaması oluştururRazor.

    İpucu

    Uygulamanızı oluşturmak için Visual Studio'yu kullanmayı tercih edebilirsiniz.

  3. Kiracıda bir web uygulaması kaydı oluşturun. Yeniden Yönlendirme URI'sini kullanmak için kullanınhttps://localhost:5001/signin-oidc. değerini, Visual Studio tarafından oluşturulan bağlantı noktalarını kullanırken uygulamanız tarafından kullanılan bağlantı noktasıyla değiştirin 5001 .

Uygulamayı değiştirme

  1. Microsoft.Identity.Web ve Microsoft.Identity.Web.UI paketlerini projeye ekleyin. Visual Studio kullanıyorsanız NuGet Paket Yöneticisi kullanabilirsiniz.

    dotnet add package Microsoft.Identity.Web
    dotnet add package Microsoft.Identity.Web.UI
    

    Önceki adımda:

    • Microsoft.Identity.Web Microsoft Identity platformunda kimlik doğrulaması için temel bağımlılık kümesini içerir.
    • Microsoft.Identity.Web.UI adlı MicrosoftIdentitybir alanda kapsüllenen kullanıcı arabirimi işlevselliğini içerir.
  2. öğesine appsettings.jsonbir AzureADB2C nesne ekleyin.

    Not

    Azure B2C kullanıcı akışlarını kullanırken, akış türünün Instance ve PolicyId değerlerini ayarlamanız gerekir.

    {
      "AzureADB2C": {
        "Instance": "https://--your-domain--.b2clogin.com",
        "Domain": "[Enter the domain of your B2C tenant, e.g. contoso.onmicrosoft.com]",
        "TenantId": "[Enter 'common', or 'organizations' or the Tenant Id (Obtained from the Azure portal. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. da41245a5-11b3-996c-00a8-4d99re19f292]",
        "ClientId": "[Enter the Client Id (Application ID obtained from the Azure portal), e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]",
        // Use either a secret or a certificate. ClientCertificates are recommended.
        "ClientSecret": "[Copy the client secret added to the app from the Azure portal]",
        "ClientCertificates": [
        ],
        // the following is required to handle Continuous Access Evaluation challenges
        "ClientCapabilities": [ "cp1" ],
        "CallbackPath": "/signin-oidc",
        // Add your policy here
        "SignUpSignInPolicyId": "B2C_1_signup_signin",
        "SignedOutCallbackPath": "/signout-callback-oidc"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Information"
        }
      },
      "AllowedHosts": "*"
    }
    
    • Etki Alanı için Azure AD B2C kiracınızın etki alanını kullanın.
    • ClientId için, kiracınızda oluşturduğunuz uygulama kaydından Uygulama (istemci) kimliğini kullanın.
    • Örneğin, Azure AD B2C kiracınızın etki alanını kullanın.
    • SignUpSignInPolicyId için Azure B2C kiracısında tanımlanan kullanıcı akışı ilkesini kullanın
    • ClientSecret veya ClientCertificates yapılandırmasını kullanın. ClientCertificates önerilir.
    • Diğer tüm değerleri olduğu gibi bırakın.
  3. Sayfalar/Paylaşılan'da adlı _LoginPartial.cshtmlbir dosya oluşturun. Aşağıdaki kodu ekleyin:

    @using System.Security.Principal
    
    <ul class="navbar-nav">
    @if (User.Identity?.IsAuthenticated == true)
    {
            <span class="navbar-text text-dark">Hello @User.Identity?.Name!</span>
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
            </li>
    }
    else
    {
            <li class="nav-item">
                <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
            </li>
    }
    </ul>
    

    Yukarıdaki kod:

    • Kullanıcının kimliğinin doğrulanmış olup olmadığını denetler.
    • Oturumu kapat veya Oturum aç bağlantısını uygun şekilde işler.
      • Bağlantı, alandaki denetleyicide Account bir eylem yöntemine MicrosoftIdentity işaret eder.
  4. Pages/Shared/_Layout.cshtml dosyasında vurgulanan satırı öğesi içine <header> ekleyin:

    <header>
        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
            <div class="container">
                <a class="navbar-brand" asp-area="" asp-page="/Index">azure_ad_b2c</a>
                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
                        aria-expanded="false" aria-label="Toggle navigation">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
                    <ul class="navbar-nav flex-grow-1">
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
                        </li>
                        <li class="nav-item">
                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
                        </li>
                    </ul>
                    <partial name="_LoginPartial" />
                </div>
            </div>
        </nav>
    </header>
    

    Ekleme, <partial name="_LoginPartial" /> bu düzeni kullanan her sayfa isteğinde kısmi görünümü işler _LoginPartial.cshtml .

  5. Program.cs aşağıdaki değişiklikleri yapın:

    1. Aşağıdaki using yönergeleri ekleyin:

      using Microsoft.Identity.Web;
      using Microsoft.Identity.Web.UI;
      using Microsoft.AspNetCore.Authentication.OpenIdConnect;
      

      Yukarıdaki kod, sonraki adımlarda kullanılan başvuruları çözümler.

    2. builder.Services Satırları aşağıdaki kodla güncelleştirin:

      builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureADB2C"));
      
      builder.Services.AddAuthorization(options =>
      {
          // By default, all incoming requests will be authorized according to 
          // the default policy
          options.FallbackPolicy = options.DefaultPolicy;
      });
      builder.Services.AddRazorPages(options => {
          options.Conventions.AllowAnonymousToPage("/Index");
      })
      .AddMvcOptions(options => { })
      .AddMicrosoftIdentityUI();
      

      Önceki kodda:

      • ve AddMicrosoftIdentityWebApp yöntemlerine yapılan AddAuthentication çağrılar, uygulamayı Open ID Bağlan kullanacak şekilde yapılandırarak özellikle Microsoft Identity platformu için yapılandırılır.
      • AddAuthorization ASP.NET Çekirdek yetkilendirmeyi başlatır.
      • Çağrı, AddRazorPages anonim tarayıcıların Dizin sayfasını görüntüleyebilmesi için uygulamayı yapılandırıyor. Diğer tüm istekler için kimlik doğrulaması gerekir.
      • AddMvcOptions ve AddMicrosoftIdentityUI Azure AD B2C'ye/Azure AD B2C'den yönlendirmek için gerekli kullanıcı arabirimi bileşenlerini ekleyin.
    3. Vurgulanan satırı yöntemine güncelleştirin Configure :

      app.UseRouting();
      
      app.UseAuthentication();
      app.UseAuthorization();
      
      app.MapRazorPages();
      

      Yukarıdaki kod, ASP.NET Core'da kimlik doğrulamasını etkinleştirir.

Uygulamayı çalıştırma

Not

Azure Uygulaması kaydı Yeniden Yönlendirme URI'leri ile eşleşen profili kullanın

  1. Uygulamayı çalıştırma.

    dotnet run --launch-profile https
    
  2. Uygulamanın güvenli uç noktasına (örneğin, https://localhost:5001/) göz atın.

    • Dizin sayfası kimlik doğrulaması sınaması olmadan işlenir.
    • Kimliğiniz doğrulanmadığından üst bilgide Oturum aç bağlantısı bulunur.
  3. Privacy bağlantısını seçin.

    • Tarayıcı, kiracınızın yapılandırılmış kimlik doğrulama yöntemine yönlendirilir.
    • Oturum açtıktan sonra üst bilgide bir karşılama iletisi ve Oturumu kapat bağlantısı görüntülenir.

Sonraki adımlar

Bu öğreticide, Azure AD B2C ile kimlik doğrulaması için bir ASP.NET Core uygulamasını yapılandırmayı öğrendiniz.

ASP.NET Core uygulaması artık kimlik doğrulaması için Azure AD B2C kullanacak şekilde yapılandırıldığına göre, yetkilendirme özniteliği uygulamanızın güvenliğini sağlamak için kullanılabilir. Şu bilgileri öğrenerek uygulamanızı geliştirmeye devam edin: