Ab路径:多个身份验证方案(AAD和AB2C)的 Blazor登录路径

我想在一个应用程序中使用 Azure AD 和 Azure B2C。我注册了两个工作正常的身份验证方案。

现在我想允许用户通过单击“使用 AD 登录”或“使用 B2C 登录”按钮来决定应使用哪种方案。

我可以通过使用链接MicrosoftIdentity/Account/SignIn为 AD 执行此操作。为此,有必要使用services.AddControllersWithViews().AddMicrosoftIdentityUI()

那么,我如何获得像上面的 B2C 链接?

这是我的代码:

        public static void AddAzureADAuthenticationApp(this IServiceCollection services, IConfigurationSection configuration)
        {
            services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApp(options =>
                {
                    configuration.Bind(options);
                    options.Events.OnTokenValidated = async context =>
                    {
                        await AuthorizationHelper.ValidateAADAppToken(context);
                    };
                })
                .EnableTokenAcquisitionToCallDownstreamApi().AddInMemoryTokenCaches();
            services.AddControllersWithViews(options =>
            {
                var policy = new AuthorizationPolicyBuilder(OpenIdConnectDefaults.AuthenticationScheme)
                    .RequireAuthenticatedUser()
                    .AddRequirements(new AzureADAuthorizationRequirement()).Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .AddMicrosoftIdentityUI(); 
            services.AddAuthorization(config =>
            {
                var policy = new AuthorizationPolicyBuilder(OpenIdConnectDefaults.AuthenticationScheme)
                    .RequireAuthenticatedUser()
                    .AddRequirements(new AzureADAuthorizationRequirement()).Build();
                config.AddPolicy(Constants.PolicyInternalUsers, policy);
            });
        }
        public static void AddAzureB2CAuthenticationApp(this IServiceCollection services, IConfigurationSection configuration, bool RequireAccountNum = false)
        {
            services.AddAuthentication()
                .AddMicrosoftIdentityWebApp(options =>
                {
                    configuration.Bind(options);
                    options.SignInScheme = Constants.B2CAuthenticationScheme;
                    options.ResponseType = "code id_token";
                    options.Scope.Clear();
                    options.Scope.Add("https://graph.microsoft.com/openid");
                    options.Events.OnTokenValidated = async context =>
                    {
                        await AuthorizationHelper.ValidateB2CAppToken(context, RequireAccountNum);
                    };
                }, openIdConnectScheme: Constants.B2CAuthenticationScheme, cookieScheme: Constants.B2CCookieScheme)
                .EnableTokenAcquisitionToCallDownstreamApi().AddInMemoryTokenCaches();
            services.AddControllersWithViews(options =>
            {
                var policy = new AuthorizationPolicyBuilder(FischerLib.Extensions.Constants.B2CAuthenticationScheme)
                .RequireAuthenticatedUser()
                .AddRequirements(new AzureB2CAuthorizationRequirement(RequireAccountNum)).Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .AddMicrosoftIdentityUI();
            services.AddAuthorization(config =>
            {
                var policy = new AuthorizationPolicyBuilder(FischerLib.Extensions.Constants.B2CAuthenticationScheme)
                    .RequireAuthenticatedUser()
                    .AddRequirements(new AzureB2CAuthorizationRequirement(RequireAccountNum)).Build();
                config.AddPolicy(Constants.PolicyExternalUsers, policy);
            });
        }

目前,我正在使用两个具有授权属性的控制器。访问这些控制器将用户重定向到登录。

但这不是我想要使用的方式。在上面的代码是库的一部分之后,我想避免在每个项目中使用控制器。

我知道有一个属性LoginPath如果我使用不同的方案,如 cookie,但我不能在AddMicrosoftIdentityWebApp(...)中设置此属性

非常感谢你!

马库斯

0

请在Building a Web Application that Supports both Azure AD and Azure AD B2C - MikaBerglund.com查看此博客

它适用于如何启用 Azure AD 和 Azure AD B2C 之间的切换,只需更改配置,即app settings.json文件,其中权限,clientId 更改。

控制器操作需要在需要时路由到选定的身份验证方案。

您可以为同一个引发support request

参考:github ref

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(550)
如何创建虚拟服务器:虚拟机VS虚拟服务器(virtual server os)
上一篇
Plc控制称重编程:PLC版本控制(acd file)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(50条)