我有一个使用 .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 类中,我刚刚添加了以下内容:
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 ..."
所以,我的问题是,我必须做什么才能使用两种不同的策略登录?或者我应该做任何配置才能做到这一点?
提前谢谢你。