繁体   English   中英

将 Azure B2C 与 MVC、.NET Core 3.1 结合使用

[英]Using Azure B2C with MVC, .NET Core 3.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:值不能为空。 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.Lazy 1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy 1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor) 在 System.Lazy 1.CreateValue 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.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。

详细步骤如下

  1. 在 Azure AD B2C 租户中注册 Web 应用程序

  2. 在 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>
  1. 测试在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM