任何人都可以提供有关将Azure B2C与MVC,.NET Core 3.1一起使用的见解或新链接。大多数示例基于Core 2.2
但是,在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.OptionsFactory
1.Create(String name) at Microsoft.Extensions.Options.OptionsMonitor
1。<> c__DisplayClass11_0.b__0()在System.Lazy1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy
1.ExecutionAndPublication(LazyHelper executeAndPublication,布尔值useDefaultConstructor)处在System.Lazy1.CreateValue() at System.Lazy
1.get_Value()在Microsoft.Extensions.Options.OptionsCache1.GetOrAdd(String name, Func
1 createOptions)在Microsoft.Extensions.Options.OptionsMonitor1.Get(String name) at Microsoft.AspNetCore.Authentication.AuthenticationHandler
1.InitializeAsync(AuthenticationScheme方案,HttpContext上下文)中在Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync(HttpContext上下文,字符串authenticationScheme)在Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext上下文)在Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文)
如果要为.net核心应用程序配置Azure AD B2C身份验证,则可以使用sdk Microsoft.AspNetCore.Authentication.AzureADB2C.UI
。但是请注意,您需要根据使用的.net核心版本选择正确的sdk版本。例如,如果您使用.net core 2.2,则sdk版本应为2.2.0。
详细步骤如下
Microsoft.AspNetCore.Authentication.AzureADB2C.UI
在Web应用程序中实施Azure AD B2C身份验证
a。在appsettings.json]中添加以下设置
Register a web application in Azure AD B2C tenantb。在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已帮助我们实现了登录和注销方法。因此我们可以直接使用它。例如
我的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?}"); }); }
- 测试
@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>