6

我正在尝试调用 localhost API 并将不记名令牌附加到标头上。它应该由 msal-angular 自动完成。目前,我已将 localhost API 路由添加到 protectedResourceMap 但标头内没有不记名令牌。尝试添加 jsonplaceholder 和 graph.microsoft 以对其进行 HTTP post 调用并且它可以工作。唯一的问题是当我尝试对 localhost API 进行 HTTP 调用时。

我正在使用:

@azure/msal-browser@2.12.0
@azure/msal-angular@2.0.0-beta.0

我已经为 app.module.ts 中的拦截器使用了工厂提供程序。

export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {
  const protectedResourceMap = new Map<string, Array<string>>();
   protectedResourceMap.set('https://graph.microsoft.com/v1.0/me', [
     'user.read',
   ]);

  protectedResourceMap.set('http://localhost:5000/api/add', [
    'api://custom api consent'
  ]);

   protectedResourceMap.set('https://jsonplaceholder.typicode.com/', [
     'api://custom api consent'
   ]);

  return {
    interactionType: InteractionType.Redirect,
    protectedResourceMap,
  };
}

它也在 app.module.ts 中注册

    providers: [
        {
          provide: HTTP_INTERCEPTORS,
          useClass: MsalInterceptor,
          multi: true,
        },
        {
          provide: MSAL_INSTANCE,
          useFactory: MSALInstanceFactory,
        },
        {
          provide: MSAL_GUARD_CONFIG,
          useFactory: MSALGuardConfigFactory,
        },
        {
          provide: MSAL_INTERCEPTOR_CONFIG,
          useFactory: MSALInterceptorConfigFactory,
        },
        MsalService,
        MsalGuard,
        Msal,
        BroadcastService,
  ],

有什么建议吗?

4

1 回答 1

6

如果其他人正在努力解决此类问题,我找到了解决方案。我发现 protectedResourceMap 更动态地工作,并且相对 url 可以工作。问题是由于添加了完整的路由,例如 http://localhost:4200/api/add 等。

解决方案只是添加 /api/

protectedResourceMap.set('/api/', [
    'api://custom api consent'
  ]);
于 2021-03-10T08:27:01.837 回答