如何在运行时更改msal权限?

时间:2019-05-16 16:38:25

标签: angular7 azure-ad-b2c msal

背景:

我有一个angular 7应用程序。 该应用使用Azure Active Directory B2C和Msal进行角度身份验证

https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-angular

我已经在AAD B2C中创建了2个用户流:

  1. 登录流程V2
  2. 注册流程V2

都自定义了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流程,输入他的详细信息并重定向回该应用程序。 然后,该应用将启动新的登录流程,并重定向到登录流程,好像用户未通过身份验证

仅当我手动更改权限链接时才会发生(我没有其他选择才能导航到正确的流程)。 否则,一切都会按预期进行。

我应该如何更改权限,以使应用程序不会通过用户身份验证?

  • 我尝试使用默认的AAD注册v1流,而没有进行自定义。
  • 我试图验证该过程,以便发现问题(默认情况下设置注册流程, 手动将登录权限更改为登录流程,但出现相同的错误(与预期相同)。
  • 我搜索了许多不同的站点和论坛,但是都没有相同的问题或解决方法。

https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/498

https://medium.com/@sambowenhughes/configuring-your-angular-6-application-to-use-microsoft-b2c-authentication-99a9ff1403b3

还有更多...

用于角度设置的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模块能够照常工作。

2 个答案:

答案 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,但如果值得,那么值得一看。