在 ASP.NET CORE 中添加多个 B2C 身份验证

Add Multiple B2C Authentification in ASP.NET CORE

我在 ASP.NET CORE 3.1 中有一个项目使用 B2C 身份验证。我已经像这样配置了身份验证的配置:

 services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
                .AddAzureADB2C(options => Configuration.Bind("A", options));

其中“A”是我的 json 以及我的 B2C 信息,例如客户 ID、租户 ID 等...

json 看起来像这样:

"A": {
    "Instance": "https://A.b2clogin.com/tfp/",
    "ClientId": "359fes9e-42a0-4c13-8693-961f6f6f0f79",
    "CallbackPath": "/signin-oidc",
    "Domain": "A.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1A_signup_signin"}, 
"B": {
    "Instance": "https://B.b2clogin.com/tfp/",
    "ClientId": "359fes9e-42a0-4c13-8693-96fejoff0f79",
    "CallbackPath": "/signin-oidc",
    "Domain": "A.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1B_signup_signin"}, 

我想切换我的 B2C 身份验证配置(例如 json A 到 json B)。

已测试:

我已经过测试,可以像这样在我的 startup.cs 中设置两个 B2C :

 services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
                .AddAzureADB2C(options => Configuration.Bind("A", options))
                .AddAzureADB2C(options => Configuration.Bind("B", options));

没有工作...

我已经过测试,可以像这样使用 OpenId Connect 设置身份验证:


 services.AddAuthentication()
              
               .AddOpenIdConnect("A", options => {

                   options.Authority = A.Authority;
                   options.CallbackPath = A.CallbackPath;
                   options.ClientId = A.ClientID;

                    })

               .AddOpenIdConnect("B", options => {

                   options.Authority = B.Authority;
                   options.CallbackPath = B.CallbackPath;
                   options.ClientId = B.ClientID;

                    })

这个解决方案也行不通。

如果您有可以解释我的问题的解决方案或文档,在此先感谢!

科伦廷

如果我理解您的要求,您需要接受来自多重登录策略的令牌。我们也有同样的要求,为了解决它,我们放弃了开箱即用的助手并创建了我们自己的助手。使用开箱即用的扩展程序将面临双重问题,一个是底层代码不允许多个元素,另一个是签名密钥的政策因政策而异。为了解决这个问题,我们基本上为每个策略调用众所周知的端点(标准格式,如果你有策略名称,url 很容易构建),然后我们获取签名密钥并将它们插入数组.我们用它来创建 TokenValidationParameters 对象,然后在调用 services.AddAuthentication() 中使用。AddJwtBearer 调用 jwtOptions.TokenValidationParameters 如果您仍然需要这个答案,我可能会整理代码以进行共享。