繁体   English   中英

Azure AD B2C 和 Microsoft Identity Web - 使用多个策略登录 (.net Core 3.1)

[英]Azure AD B2C & Microsoft Identity Web - Sign In with multiple policies (.net Core 3.1)

我有一个使用 .NET Core 3.1 MVC Web 应用程序的应用程序,该应用程序使用 Azure AD B2C 来登录用户,我刚刚将其迁移到使用 Microsoft Identity Web 库。

我们希望有两种不同的登录策略,一种针对普通用户 ( B2C_1A_SignUpOrSignIn ),另一种针对管理员用户 ( B2C_1A_SignInAdmin )。 因此,在 Appsettings 中,我们有以下格式:

"AzureAdB2C": {
    "Instance": "https://url.b2clogin.com/tfp/",
    "ClientId": "clientId",
    "CallbackPath": "/signin-oidc",
    "SignedOutCallbackPath": "/signout/B2C_1A_SignUpOrSignIn",
    "Domain": "url.onmicrosoft.com",
    "Domain_b2cLogin": "url", // Required by the Cookie Policy
    "SignUpSignInPolicyId": "B2C_1A_SignUpOrSignIn",
    "SignInAdminPolicyId": "B2C_1A_SignInAdmin",
    "ResetPasswordPolicyId": "B2C_1A_PasswordReset",
    "EditProfilePolicyId": "",
    "ClientSecret": key,
    "B2cExtensionAppClientId": "key"
  },

在 Startup class 中,我刚刚添加了以下内容:

            services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
           .AddMicrosoftIdentityWebApp(Configuration, "AzureAdB2C");

而且我还覆盖了“AzureController”,因此,对于普通用户,我使用从此处获得的相同方法Microsoft Identity Web - Account Controller “SignIn”。 但是,对于管理员用户,我将该方法更改为使用类似于 PasswordReset 方法提供的方法,如下所示:

        public IActionResult SignInAdmin()
    {
        string scheme = OpenIdConnectDefaults.AuthenticationScheme;

        var redirectUrl = Url.Content("~/");
        var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
        properties.Items[Constants.Policy] = "B2C_1A_SignInAdmin";
        return Challenge(properties, scheme);
    }

因此,如您所见,我为此方法使用了不同的策略名称。

一切似乎都正常,用户根据策略被重定向到正确的登录页面,令牌由 Azure 颁发,我们的应用程序在我们的方法中接受令牌

options.Events.OnTokenValidated = context => {}

然而,不久之后,身份验证和方法出现了问题

options.Events.OnRemoteFailure 

被调用时出现以下异常“{”消息包含错误:'invalid_grant',error_description:'AADB2C90088:尚未为此端点发出提供的授权。 实际值: B2C_1A_SignUpOrSignIn和预期值: B2C_1A_SignInAdmin ...”

所以,我的问题是,我必须做什么才能使用两种不同的策略登录? 还是我应该做任何配置才能做到这一点?

提前谢谢你。

我想 B2c 中间件验证了“tfp”声明。 这通常应与 SignInPolicyId 匹配。 您可能必须覆盖 TokenValidation 才能让这两个策略 (tfp = trustedFrameworkPolicy) 有效

暂无
暂无

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

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