0

我使用 @azure/msal-browser 和 @azure/msal-angular 包来简单地为我的登录用户检索 MSAL 令牌。由于我真正需要的只是令牌,因此我只在 app.module.ts 中提供了 MsalService 和 MSAL_INSTANCE。我正在使用重定向流,并选择自己订阅 .handleRedirectObservable() 方法,而不是使用 MsalRedirectComponent (以便我确切知道令牌何时可用)。

我的问题是,当重定向发生并且我被转发回我的应用程序时,有一段时间我的应用程序正在运行,但重定向交互仍未完全完成。如果我允许我的应用程序此时实际开始运行,它有可能会在令牌真正存在之前尝试使用它并导致错误。因此,我必须定义一个名为 isInteractionInProgress 的方法,并在实际开始执行我的应用程序之前在我的 app.component.ts 中调用它:

  public isInteractionInProgress(): boolean {
    for (let i = 0; i < sessionStorage.length; i+= 1) {
      if (sessionStorage.getItem(sessionStorage.key(i)) === 'interaction_in_progress') {
        return true;
      }
    }
    return false;
  }

由于我不知道生成 msal-angular 库用于存储“interaction_in_progress”值的密钥的可靠方法,因此我必须自己遍历会话存储并查找此密钥。如果它存在,那么我的应用程序知道一个 MSAL 令牌正在发送中,它需要等待。

有没有更好的解决方案?似乎这应该是我需要的:

this.msalBroadcastService.inProgress$
      .pipe(
        filter((status: InteractionStatus) => status === InteractionStatus.None),
        takeUntil(this._destroying$)
      )
      .subscribe(() => {
        // Do user account/UI functions here
      })

但它所做的只是在“无”上激活两次,第二次“无”似乎是令牌实际可用的时候,但我不确定这是否属实。

那么有没有一种可靠的方法可以知道重定向何时实际发生?谢谢!

4

1 回答 1

0

您似乎已经通过 MsalRedirectComponent 订阅了 handleRedirectObservable(),这是推荐的方法。

在这里阅读更多:

https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/redirects.md

https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/redirects.md

于 2021-07-02T05:16:31.053 回答