如何侦听 MSAL-Angular 令牌重新验证请求?

How do I listen for MSAL-Angular token reauthentiation requests?

所以我的 angular 项目中的 MSAL-ANGULAR 部分工作正常。问题出在我将会话保持打开状态一段时间,并且 MSAL 在令牌可能过期时调用对 Azure AD 的重新身份验证请求。这会自动重定向到 Azure AD 进行验证,如果启动路径不是 Azure 中的注册路径,则会失败(例如 localhost:1000/login 会成功,但 localhost:1000/ 订单不会)。

理想情况下,我不必在 Azure AD 中指定每个路径排列,所以我想到我会拦截身份验证重定向,重定向到默认 URL,然后启动身份验证过程。这是我最初的想法:

我认为身份验证层中的以下代码会为此设置一个挂钩,即

import { MsalService, BroadcastService } from '@azure/msal-angular';

broadcast.subscribe("msal:loginSuccess",
  () => {
  ...
}
this.broadcast.subscribe("msal:loginFailure",
  () => {
  ...
});

但它看起来并没有击中那个部分,而是在 app.routing:

内挂钩
import { MsalGuard } from "@azure/msal-angular";

const appRoutes: Routes = [
  { path: 'login', component: LoginComponent, canActivate: [MsalGuard] },
  { path: 'orders', component: OrdersComponent, canActivate: [MsalGuard] },
];

如有任何想法,我们将不胜感激。

好吧,事实证明你可以破解系统 - 你需要做的就是在 Azure Active Directory 的清单中使用通配符。

1/ 登录 https://portal.azure.com

2/ 转到 Azure Active Directory

3/ 转到应用程序注册

4/ Select 你的应用

5/ 打开清单并设置以下内容:

"replyUrlsWithType": [
    {
        "url": "https://localhost:1000/*",
        "type": "Web"
    }
],

6/ 保存...瞧。这会强制 Azure AD 接受来自该域的所有 URI

注意:Azure 门户主动阻止通配符匹配...但您可以通过清单绕过它;)