Итак, после некоторой помощи от Junnas и NanYu и нескольких старых постов, я решил проблему. В моей предыдущей настройке у меня были области видимости для моего Api и MS Graph вместе, но проблема в том, что токен, возвращаемый для каждого, отличается. Мне нужно было приобретать разные токены при достижении разных Api (мой против Graph). После разделения областей действия и получения токена самостоятельно, я смог аутентифицироваться с обоими. Кроме того, MsalInterceptor
работает очень хорошо при правильной настройке и избавляет меня от написания отдельных вызовов для получения токенов. Вот мой код:
oauth.ts
export const OAuthSettings = {
appId: '{client Id}',
authority: 'https://login.microsoftonline.com/{tenant Id}',
apiScopes: [
'api://{api id}/access_as_user'
],
graphScopes: [
'user.read'
]
}
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { MsalModule, MsalInterceptor } from '@azure/msal-angular';
import { LogLevel } from 'msal';
import { AppComponent } from './app.component';
import { OAuthSettings } from '../oauth';
// this is only for logging and tracing
export function msalLogCallBack(level: LogLevel, message: string, containsPii: boolean) {
console.log('[MSAL]:' + message);
}
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule,
HttpClientModule,
MsalModule.forRoot({
clientID: OAuthSettings.appId,
authority: OAuthSettings.authority,
unprotectedResources: ['{angular app uri}'],
protectedResourceMap: [
['{api endpoint}', OAuthSettings.apiScopes],
['https://graph.microsoft.com/v1.0/me', OAuthSettings.graphScopes]
],
level: LogLevel.Verbose,
logger: msalLogCallBack
})
],
providers: [ {
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true
}],
bootstrap: [AppComponent]
})
export class AppModule { }
Из этого указать, что любые вызовы, сделанные к Api, будут перехвачены, и правильный заголовок будет прикреплен в заголовке вызова MsalInterceptor
.