将Azure B2C与MVC,.NET Core 3.1一起使用

问题描述 投票:0回答:1

任何人都可以提供有关将Azure B2C与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:值不能为null。 (参数“ uriString”)在System.Uri..ctor(String uriString)在Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COpenIdConnectOptionsConfiguration.BuildAuthority(AzureADB2COptions AzureADB2COptions)在Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COpenIdConnectOptionsConfiguration.Configure(字符串名称,OpenIdConnectOptions选项)在Microsoft.Extensions.Options.OptionsFactory1.Create(String name) at Microsoft.Extensions.Options.OptionsMonitor1。<> c__DisplayClass11_0.b__0()在System.Lazy1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy1.ExecutionAndPublication(LazyHelper executeAndPublication,布尔值useDefaultConstructor)处在System.Lazy1.CreateValue() at System.Lazy1.get_Value()在Microsoft.Extensions.Options.OptionsCache1.GetOrAdd(String name, Func1 createOptions)在Microsoft.Extensions.Options.OptionsMonitor1.Get(String name) at Microsoft.AspNetCore.Authentication.AuthenticationHandler1.InitializeAsync(AuthenticationScheme方案,HttpContext上下文)中在Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync(HttpContext上下文,字符串authenticationScheme)在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext上下文)在Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文)

c# asp.net-mvc azure asp.net-core-3.1
1个回答
0
投票

如果要为.net核心应用程序配置Azure AD B2C身份验证,则可以使用sdk Microsoft.AspNetCore.Authentication.AzureADB2C.UI。但是请注意,您需要根据使用的.net核心版本选择正确的sdk版本。例如,如果您使用.net core 2.2,则sdk版本应为2.2.0。

详细步骤如下

  1. Microsoft.AspNetCore.Authentication.AzureADB2C.UI

  2. 在Web应用程序中实施Azure AD B2C身份验证

    a。在appsettings.json]中添加以下设置

    Register a web application in Azure AD B2C tenant

    b。在Startup.cs中添加以下代码]

     {
    "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"
    },
    ...
    }
    
    

    c。实施登录并退出。 SDK已帮助我们实现了登录和注销方法。因此我们可以直接使用它。例如

  3. 我的login.cshtml

 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?}");
      });
  }
  1. 测试@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>
© www.soinside.com 2019 - 2024. All rights reserved.