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

标签 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 个用户流:

  • 登录流程V2
  • 注册流程V2

  • 两者都有定制的用户界面,

    两者都包含指向其他 AAD B2C 流的重定向按钮。

    (从注册 -> 登录 | 从登录 -> 注册)

    我已经在 angular 中设置了 MSAL 模块,登录流程作为默认权限
    例如
    MsalModule.forRoot({
    ...,
    authority: <"https://mytenant.b2clogin.com/tfp/mytenant.onmicrosoft.com/B2C_1_Signin">,
    ...
    })
    

    (通知 B2C_1_Signin 流程名称)

    这运行良好,用户可以登录和注册(在流内的流之间导航并进行身份验证)。

    问题:

    当我尝试手动更改 MSAL 模块权限时出现问题
    (当应用程序启动时,它在 MSAL init 中定义为 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 模块能像往常一样工作,即使我更改了初始定义的权限。

    最佳答案

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

    关于angular7 - 如何在运行时更改 msal 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56173067/

    相关文章:

    javascript - 使用 Angular 获取复选框的值

    angular - 在 Angular 主导出中航行时,保留次要路线

    Azure AD B2C - 首次登录场景中的密码重置只能通过自定义策略实现?

    azure - B2C Web 应用程序 session 生命周期

    azure-ad-b2c - MSAL 范围(openid 配置文件offline_access)。基本的简单配置文件可能不可行?

    angular - 通过隐藏/混淆代码来保护 Angular 6/7 应用程序

    angular - 如何使用 Angular 路由禁用 url 更改

    azure - Active Directory B2C onBehalfOf 对 SQL Azure 进行身份验证

    python - 在 Web 应用中使用 SAML 实现 Azure AD 身份验证

    c# - MSAL - PublicClientApplication - GetAccountsAsync() 不返回任何帐户