我有一个angular 7应用程序。 该应用使用Azure Active Directory B2C和Msal进行角度身份验证
https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular
我已经在AAD B2C中创建了2个用户流:
都自定义了UI,
都包含一个指向另一个AAD B2C流的重定向按钮。
(从注册->登录|从登录->注册)
我已按角度设置了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流程,输入他的详细信息并重定向回该应用程序。 然后,该应用将启动新的登录流程,并重定向到登录流程,好像用户未通过身份验证。
仅当我手动更改权限链接时才会发生(我没有其他选择才能导航到正确的流程)。 否则,一切都会按预期进行。
我应该如何更改权限,以使应用程序不会通过用户身份验证?
https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/498
还有更多...
用于角度设置的MSAL: “ authentication.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模块能够照常工作。
答案 0 :(得分:0)
您是否尝试过针对MSAL GitHub库提交问题?可以在这里找到MSAL.JS的问题部分:https://github.com/AzureAD/microsoft-authentication-library-for-js/issues
实际上存在一个持续存在的问题,试图根据以下问题在运行时更改权限:https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/784
由于不完全相同,我建议提交一个新的github问题。但是,目前看来,此功能尚不支持。
答案 1 :(得分:0)
我们的应用程序存在类似的问题。该修复程序实际上是关闭了MFA。
如果打开MFA进行登录,则从注册切换为登录不会向我们提供MFA提示,并且毫不客气地未授权用户登录。
我们的解决方案是检测在注册后是否直接尝试登录,并针对该情况专门进行非MFA登录。不知道您是否正在做MFA,但如果值得,那么值得一看。