Angular 11 と .NET Core 2.2 を実行する Web アプリで MSAL ライブラリを使用して Azure AD ログインを実装しました。ログインは正常に行われているようですが、トークンの期限切れによる 401 (未承認) HTTP エラーの処理方法に関する信頼できる情報が見つかりませんでした。どうやら、インタラクティブなログインを処理した後に acquireTokenSilent を呼び出す必要があるようですが、これを行うと次のエラーが発生します。
アクセス トークンの取得中にエラーが発生しました: BrowserAuthError: no_account_error: acquireTokenSilent にアカウント オブジェクトが提供されておらず、アクティブなアカウントが設定されていません。setActiveAccount を呼び出すか、リクエストでアカウントを提供してください。
setActiveAccount メソッドはどこにありますか? MsalService クラスのどこにもありません。また、ログインに成功した後、図書館はアカウントをアクティブに設定する必要があると思います。
ユーザーがログインした後に API から 401 エラーを返し、acquireTokenSilent 呼び出しをトリガーすることで、このシナリオをテストしています。
401 エラーを処理する Interceptor のコードは次のとおりです。
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 オブジェクトには、トークン、ユーザー情報、スコープなど、最初のログインの結果が含まれています。トークンの有効期限が切れるたびにユーザーにポップアップが表示されるべきではないと思います。助けていただければ幸いです。