Angular msal_ angular с ASP. NET Core Web API возвращает недопустимый токен, недопустимая подпись AzureAD - PullRequest
0 голосов
/ 29 марта 2020

Я создал приложение Angular, следуя этому примеру: https://github.com/microsoftgraph/msgraph-training-angularspa

Я могу войти в систему и даже пройти аутентификацию в MS Graph из приложения Angular.

Я пытаюсь передать токен в созданный мной сервис API. Однако я продолжаю получать следующее сообщение об ошибке:

WWW-Authenticate: ошибка носителя = "invalid_token", error_description = "Подпись недействительна"

Я перепробовал все возможно, пока не повезло. Я продолжаю получать эту ошибку. Я пробовал библиотеку AzureADBearer:

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
    .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options => 
{
    options.Authority += "/v2.0";
    options.TokenValidationParameters.ValidAudiences = new string[]
    {
        options.Audience, $"api://{options.Audience}"
    };

    options.TokenValidationParameters.ValidateIssuer = false;
    options.TokenValidationParameters.IssuerValidator = AadIssuerValidator.GetIssuerValidator(options.Authority).Validate;
});

Я также пробовал библиотеку Microsoft.Identity.Web, но получаю ту же ошибку:

services.AddProtectedWebApi(Configuration);

У меня есть Я искал несколько дней, я нашел других с такой же проблемой, но пока нет ясного решения. Буду признателен за любую помощь.

РЕДАКТИРОВАТЬ

Я пытаюсь создать приложение для своей организации, которое использует AzureAD для проверки подлинности. Приложение имеет Angular внешний интерфейс с aspnetcore webapi в качестве внутреннего интерфейса. Я не слишком разборчив в том, как этого добиться. Просто ищу прочь, чтобы сделать это.

1 Ответ

0 голосов
/ 04 апреля 2020

Итак, после некоторой помощи от 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.

...