【发布时间】:2021-01-26 15:14:19
【问题描述】:
我是 MSAL 的新手,我不明白为什么在将 MsalInterceptor 配置为 app.module.ts 中的提供程序的情况下访问我的 Web API 时会返回 401。
作为参考,我的app.module.ts 看起来像这样:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { environment } from '../environments/environment';
import { MsalModule, MsalInterceptor } from "@azure/msal-angular";
import { BrowserCacheLocation } from "@azure/msal-browser";
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { ToastrModule } from 'ngx-toastr';
import { NavbarComponent } from './views/partials/navbar/navbar.component';
const isIE = window.navigator.userAgent.indexOf('MSIE ') > -1 || window.navigator.userAgent.indexOf('Trident/') > -1;
@NgModule({
declarations: [
AppComponent,
NavbarComponent
],
imports: [
BrowserModule,
AppRoutingModule,
MsalModule.forRoot({
auth: {
clientId: environment.azure.clientId,
authority: environment.azure.authority,
redirectUri: 'http://localhost:4200/profile'
},
cache: {
cacheLocation: BrowserCacheLocation.LocalStorage,
storeAuthStateInCookie: isIE,
},
}, {
popUp: !isIE,
consentScopes: [
'user.read',
'openid',
'profile',
'api://xxx/xxx/xxx'
],
unprotectedResources: [],
protectedResourceMap: [
['https://graph.microsoft.com/beta/', ['user.read']],
['https://localhost:44312/weatherforecast/getTest', ['api://xxx/xxx/xxx']]
],
extraQueryParameters: {},
}),
BrowserAnimationsModule,
HttpClientModule,
ToastrModule.forRoot(),
],
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true
}],
bootstrap: [AppComponent]
})
export class AppModule {}
我使用包含以下功能的请求设置了一个服务:
async getForecast() {
return await this.http.get('https://localhost:44312/weatherForecast/getTest').toPromise();
}
WeatherForecast“getTest”函数如下所示:
[HttpGet("getTest")]
public IActionResult Test()
{
return Ok("test");
}
显然,控制器本身是用[Authorize] 标签装饰的。
我认为访问令牌可能不会被包裹在 HTTP 请求周围(?),尽管正如 Microsoft Docs 所述,访问令牌处理会在拦截器本身内自动发生。
还要注意:我可以毫无问题地向 Graph API 发出请求(对 /me/photo/$value 的 GET 请求)。
提前感谢您! :)
【问题讨论】: