0

我在运行 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 对象包含初始登录的结果,包括令牌、用户信息和范围。我不认为每次令牌过期时用户都应该看到一个弹出窗口。帮助将不胜感激。

4

0 回答 0