我在运行 Angular 11 和 .NET Core 2.2 的 Web 应用上使用 MSAL 库实现了 Azure AD 登录。登录似乎工作正常,但我找不到任何关于如何处理由于令牌过期而导致的 401(未经授权)HTTP 错误的可靠信息。显然,我必须在处理完交互式登录后调用 acquireTokenSilent,但是当我这样做时,我收到以下错误:
检索访问令牌时出错:BrowserAuthError:no_account_error:没有提供帐户对象来获取令牌Silent,也没有设置活动帐户。请致电 setActiveAccount 或根据请求提供帐户。
在哪里可以找到 setActiveAccount 方法?我在 MsalService 类的任何地方都看不到它。另外我相信图书馆应该在成功登录后将帐户设置为活动状态。
我正在通过在用户登录后从我的 API 返回 401 错误来测试这种情况,以触发 acquireTokenSilent 调用。
这是处理 401 错误的拦截器的代码:
return next.handle(authReq).pipe(catchError((err, caught) => {
if (err instanceof HttpErrorResponse && err.status === 401) {
if(this._settings.msalAuthentication) {
console.log("Attempting to get new MSAL access token: "+this._settings.msalAuthentication.scopes);
this._msal.acquireTokenSilent({scopes: this._settings.msalAuthentication.scopes})
.subscribe(result => {
console.log("received new MSAL token: "+result);
this._dataService.handleMsalAuthenticationResult(result);
},
error => {
console.log("Error retrieving access token: "+error);
});
return EMPTY;
}
msalAuthentication 对象包含初始登录的结果,包括令牌、用户信息和范围。我不认为每次令牌过期时用户都应该看到一个弹出窗口。帮助将不胜感激。