【问题标题】:How to change msal authority in runtime?如何在运行时更改 msal 权限?
【发布时间】: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 个用户流:

  1. 登录流程 V2
  2. 注册流程 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

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

还有更多...

用于角度设置的 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 模块能够像往常一样工作,即使我更改了初始定义的权限。

【问题讨论】:

标签: angular7 azure-ad-b2c msal


【解决方案1】:

我们的应用程序也遇到了类似的问题。修复基本上是关闭 MFA。

如果为登录启用了 MFA,则从注册切换到登录不会向我们提供 MFA 提示,并且毫不客气地没有授权用户登录。

我们的解决方案是检测是否在注册后直接尝试登录,并专门针对该案例进行非 MFA 登录流程。不确定你是否在做 MFA,但如果你是的话,值得一看。

【讨论】:

    【解决方案2】:

    您是否尝试过针对 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 issue。但是,目前看来,这还不是受支持的功能。

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多