Использование Azure B2 C с MVC,. NET Core 3.1 - PullRequest
0 голосов
/ 02 апреля 2020

Может ли кто-нибудь предоставить некоторую информацию или новые ссылки по использованию Azure B2 C с MVC,. NET Core 3.1. Большинство примеров основаны на Core 2.2

https://docs.microsoft.com/en-us/samples/azure-samples/active-directory-b2c-dotnetcore-webapp/an-aspnet-core-web-app-with-azure-ad-b2c/

Тем не менее, кажется, что более чем несколько вещей по-разному работают с 3.1.

В 2.2 возникает ошибка:

System.ArgumentNullException: значение не может быть нулевым. (Параметр 'uriString') в System.Uri..ctor (String uriString) в Microsoft.AspNetCore.Authentication.AzureADB2 C .UI.AzureADB2COpenIdConnectOptionsConfiguration.BuildAuthority (AzureADB2COptions AzureADB2COuseC) .Aure.Ab. UI.AzureADB2COpenIdConnectOptionsConfiguration.Configure (имя строки, параметры OpenIdConnectOptions) в Microsoft.Extensions.Options.OptionsFactory 1.Create(String name) at Microsoft.Extensions.Options.OptionsMonitor 1. <> C__DisplayClass11_0.b__0 () в системе. System.Lazy 1.CreateValue() at System.Lazy 1.get_Value () в Microsoft.Extensions.Options.OptionsCache 1.GetOrAdd(String name, Func 1 createOptions) в Microsoft.Extensions.Options.OptionsMonitor 1.Get(String name) at Microsoft.AspNetCore.Authentication.AuthenticationHandler 1.InitializeAsyn c (схема AuthenticationScheme, контекст HttpContext) в Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsyn c (контекст HttpContext, String authenticationScheme) в Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Inv oke (контекст HttpContext) в Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke (контекст HttpContext)

1 Ответ

0 голосов
/ 07 апреля 2020

Если вы хотите настроить Azure AD B2 C auth для вашего основного приложения. net, вы можете использовать sdk Microsoft.AspNetCore.Authentication.AzureADB2C.UI. Но учтите, что вам нужно выбрать правильную версию SDK в соответствии с используемой версией. net core. Например, если вы используете. net core 2.2, версия sdk должна быть 2.2.0.

Подробные шаги приведены ниже

  1. Регистрация веб-приложение в Azure AD B2 C арендатор

  2. Реализация Azure AD B2 C авторизация в веб-приложении

    a. Добавьте следующие настройки в настройках приложения. json

     {
    "AzureAdB2C": {
    "Instance": "https://<your-tenant-name>.b2clogin.com",
    "ClientId": "<web-app-application-id>",
    "Domain": "<your-b2c-domain>"
    "CallbackPath": "/signin-oidc",
    "SignUpSignInPolicyId": "B2C_1_test",
    "ResetPasswordPolicyId": "B2C_1_test2",
    "EditProfilePolicyId": "B2C_1_test1"
    },
    ...
    }
    
    

    b. добавьте следующий код в Startup.cs

     public void ConfigureServices(IServiceCollection services)
      {
          services.Configure<CookiePolicyOptions>(options =>
          {
              // This lambda determines whether user consent for non-essential cookies is needed for a given request.
              options.CheckConsentNeeded = context => true;
              options.MinimumSameSitePolicy = SameSiteMode.None;
          });
    
          services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
              .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
    
          services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
      }
    
      // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
      public void Configure(IApplicationBuilder app, IHostingEnvironment env)
      {
          if (env.IsDevelopment())
          {
              app.UseDeveloperExceptionPage();
          }
          else
          {
              app.UseExceptionHandler("/Home/Error");
              // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
              app.UseHsts();
          }
    
          app.UseHttpsRedirection();
          app.UseStaticFiles();
          app.UseCookiePolicy();
    
          app.UseAuthentication();
    
          app.UseMvc(routes =>
          {
              routes.MapRoute(
                  name: "default",
                  template: "{controller=Home}/{action=Index}/{id?}");
          });
      }
    

    c. Реализовать вход и выход. SDK помог нам реализовать метод входа и выхода. Таким образом, мы можем напрямую использовать это. Например

мой логин.cs html

@using System.Security.Principal
@using Microsoft.AspNetCore.Authentication.AzureADB2C.UI
@using Microsoft.Extensions.Options
@inject IOptionsMonitor<AzureADB2COptions> AzureADB2COptions

@{
    var options = AzureADB2COptions.Get(AzureADB2CDefaults.AuthenticationScheme);
}


<ul class="navbar-nav">
@if (User.Identity.IsAuthenticated)
{

            <li class="nav-item">
                <span class="nav-text text-dark">Hello @User.Identity.Name!</span>
            </li>

        <li class="nav-item">
            <a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="SignOut">Sign out</a>
        </li>
}
else
{
        <li class="nav-item">
            <a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="SignIn">Sign in</a>
        </li>
}
</ul>
Тест enter image description here
...