如何侦听 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 门户主动阻止通配符匹配...但您可以通过清单绕过它;)
所以我的 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 门户主动阻止通配符匹配...但您可以通过清单绕过它;)