【发布时间】:2019-10-03 23:57:30
【问题描述】:
背景:
我有一个 Angular 7 应用程序。 该应用使用 Azure Active Directory B2C 和 Msal 进行身份验证
https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular
我在 AAD B2C 中创建了 2 个用户流:
- 登录流程 V2
- 注册流程 V2
两者都定制了 UI,
两者都包含指向另一个 AAD B2C 流的重定向按钮。
(从注册 -> 登录 | 从登录 -> 注册)
我已经在 Angular 中设置了 MSAL 模块,使用登录流作为默认权限 例如
MsalModule.forRoot({
...,
authority: <"https://mytenant.b2clogin.com/tfp/mytenant.onmicrosoft.com/B2C_1_Signin">,
...
})
(注意B2C_1_Signin流程名称)
这很好用,用户可以登录和注册(在流中导航并进行身份验证)。
问题:
当我尝试手动更改 MSAL 模块权限时问题开始 (在 MSAL 初始化中定义为应用启动时的 B2C_1_Signin 流)。
示例: 用户进入欢迎页面,可以单击登录/注册。 如果用户点击登录,则一切正常,因为权限链接在开始时定义为登录流程(B2C_1_Signin)。
如果用户想注册, 我需要更改权限链接 到选定的 AAD 流 (B2C_1_Signup),然后我调用 MSAL loginRedirect(),用户重定向到正确的 AAD 流,输入他的详细信息并重定向回应用程序。 然后应用程序将启动一个新的登录流程并重定向到登录流程就好像用户没有经过身份验证。
仅当我手动更改权限链接时才会发生这种情况(我没有其他选择可以导航到正确的流程)。 否则,一切都按预期工作。
我应该如何更改权限,使应用不会失败用户认证?
- 我已尝试使用没有自定义的默认 AAD 注册 v1 流程。
- 我已尝试恢复流程以隔离问题(将注册流程设置为默认值, 手动将权限更改为登录流程,同样的错误(如预期的那样)。
- 我搜索了许多不同的网站和论坛,但没有一个有相同的问题或修复方法。
https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/498
还有更多...
用于角度设置的 MSAL: “身份验证.module.ts”
MsalModule.forRoot({
clientID: "<my-client-id>",
authority: "https://tenant.b2clogin.com/tfp/tenant.onmicrosoft.com/B2C_1_Signin",
redirectUri: "http://localhost:4200/dashboard",
/* default is true */
validateAuthority: false,
/* Defaults is 'sessionStorage' */
cacheLocation : "localStorage",
/* Defaults is 'redirectUri */
postLogoutRedirectUri: "http://localhost:4200/",
/* Ability to turn off default navigation to start page after login. Default is true. */
navigateToLoginRequestUrl : false,
/* Show login popup or redirect. Default:Redirect */
popUp: false,
})
AuthService 包装 MSAL 身份验证服务: “auth.service.ts”
constructor(private msalService: MsalService) {}
public login(scopes: string[] = null, queryParams: string = null): void {
this.msalService.authority = this.tenantConfig.baseURL + "/" + this.tenantConfig.tenant + "/" + this.tenantConfig.signInPolicy;
this.msalService.loginRedirect(scopes, queryParams);
}
public signup(scopes: string[] = null, queryParams: string = null): void {
this.msalService.authority = this.tenantConfig.baseURL + "/" + this.tenantConfig.tenant + "/" + this.tenantConfig.signUpPolicy;
this.msalService.loginRedirect(scopes, queryParams);
}
我希望 Msal 模块能够像往常一样工作,即使我更改了初始定义的权限。
【问题讨论】:
-
您是否尝试过针对 MSAL GitHub 库提交问题?可以在此处找到 MSAL.JS 的问题部分:github.com/AzureAD/microsoft-authentication-library-for-js/… 在运行时尝试更改权限实际上存在一个持续的问题:github.com/AzureAD/microsoft-authentication-library-for-js/…
标签: angular7 azure-ad-b2c msal