azure 有没有办法知道什么时候msal重定向正在进行中?

iih3973s  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(117)

我使用@azure/msal-browser和@azure/msal-angular包,以便简单地为我的登录用户检索MSAL令牌。因为我真正需要的只是令牌,所以我只在app. module. ts中提供了MsalService和MSAL_BRANNCE。我正在使用重定向流,并选择自己订阅. jsp RedirectObservable()方法,而不是使用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
      })

但它所做的就是激活“无”两次,第二个“无”似乎是当令牌实际上是可用的,但我不确定这是否是真的。

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

相关问题