我使用@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
})
但它所做的就是激活“无”两次,第二个“无”似乎是当令牌实际上是可用的,但我不确定这是否是真的。
那么,有没有一种可靠的方法可以知道重定向实际上是什么时候发生的?谢谢!
1条答案
按热度按时间pkmbmrz71#
看起来你已经通过推荐的方法MsalRedirectComponent订阅了RedirectObservable()。
在此阅读更多信息:
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