所以我让MSAL角块在我的角度项目中正确地工作了。问题在于,当我将会话打开了一段时间,当令牌可能过期时,MSAL会调用对Azure AD的重新身份验证请求。这将自动重定向到Azure AD以进行验证,如果启动路径不是Azure中的注册路径(例如,localhost:1000/login会成功,但localhost:1000/orders不会成功),则会失败。
理想情况下,我不应该指定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] },
];任何想法都将不胜感激。
发布于 2019-06-05 15:33:09
事实证明,您可以黑进系统--您所需要做的就是在Azure的清单中使用通配符。
即
1/日志进入https://portal.azure.com
2/转到Azure
3/转到应用程序注册
4/选择你的应用程序
5打开清单并设置如下:
"replyUrlsWithType": [
{
"url": "https://localhost:1000/*",
"type": "Web"
}
],6/保存..。然后瞧。这迫使Azure AD接受来自该域的所有URI
注意: Azure门户会主动阻止通配符匹配..。但你可以通过舱单绕过它;)
发布于 2022-06-23 12:01:06
我知道你已经解决了你的问题,但你的问题从来没有得到正确的回答。经过很长一段时间的研究,我终于找到了一种合适的方法来监听MSAL--角令牌重新识别请求。
下面的订阅会监听每个HTTP请求,并在您的AccessToken正确且未过期时发出事件,例如'msal:acquireTokenStart‘。
如果您的AccessToken不正确并且确实过期了,还有另一个事件使用RefreshToken从网络中获取一个新的AccessToken:'msal:acquireTokenFromNetworkStart‘。
如果两个标记都是错误的或删除的,则发送'msal:acquireTokenFailure‘。这些发射可以用于例如重定向或注销用户。
this.msalBroadcastService.msalSubject$.subscribe({
next: (msalSubject) => {
if (msalSubject.eventType === 'msal:acquireTokenFailure') {
// Do something when acquiring of the token fails
}
}
},
});上面的代码在ngOnInit内部。不要忘记导入MsalBroadcastService并将其注入构造函数。
https://stackoverflow.com/questions/56451676
复制相似问题