![](/img/trans.png)
[英]Azure B2C check user email Id exists or not using Graph in ASP.NET Core 3.1 MVC
[英]Using Azure B2C with MVC, .NET Core 3.1
任何人都可以提供一些有关将 Azure B2C 与 MVC、.NET Core 3.1 结合使用的见解或新链接。 大多数示例基于 Core 2.2
然而,3.1 似乎有很多不同的事情。
我在 2.2 中遇到的错误是:
System.ArgumentNullException:值不能为空。 Microsoft.AspNetCore.Authentication.AzureADB2C.UI.AzureADB2COpenIdConnectOptionsConfiguration.BuildAuthority(AzureADB2COptions AzureADB2COptions) 处的 System.Uri..ctor(String uriString) 处的 System.Uri..ctor(String uriString) 处的(参数 'uriString')。字符串名称,OpenIdConnectOptions 选项)在 Microsoft.Extensions.Options.OptionsFactory 1.Create
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 executionAndPublication, Boolean useDefaultConstructor) 在 System.Lazy 1.CreateValue1.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 scheme, Http 上下文上下文) 在 Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync(HttpContext context, String authenticationScheme) 在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) 在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
如果要为 .net 核心应用程序配置 Azure AD B2C 身份验证,可以使用 sdk Microsoft.AspNetCore.Authentication.AzureADB2C.UI
。 但请注意,您需要根据您使用的.net core 版本选择正确的sdk 版本。 例如,如果您使用 .net core 2.2,则 sdk 版本应为 2.2.0。
详细步骤如下
在 Web 应用程序中实施 Azure AD B2C 身份验证
一种。 在 appsettings.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" }, ... }
湾在 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 帮助我们实现了登录和退出方法。 所以我们可以直接使用它。 例如
我的登录名.cshtml
@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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.