微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法知道何时进行 msal 重定向?

如何解决有没有办法知道何时进行 msal 重定向?

我使用 @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
      })

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

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

解决方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。