Azure AD B2 C: область «user.read», указанная в запросе, не поддерживается - PullRequest
0 голосов
/ 01 марта 2020

Приложение Angular является модифицированной версией этого примера приложения: https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/samples/angular8-sample-app

Используя MSAL, приложение может входить и выходить из системы, используя Azure AD B2 C , При доступе к компоненту profile выводится следующая ошибка:

ОШИБКА: ошибка (в обещании): ошибка сервера: AADB2C90117: область «user.read», указанная в запросе, не поддерживается .

Идентификатор корреляции: fffc59f4-3c83-4d6 c -b77a-c8f04939ead1
Метка времени: 2020-03-01 19: 51: 13Z
Ошибка сервера: AADB2C90117: Область действия 'user.read 'в запросе не поддерживается.
Идентификатор корреляции: fffc59f4-3c83-4d6 c -b77a-c8f04939ead1
Метка времени: 2020-03-01 19: 51: 13Z

app.module.ts :

import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { NgModule } from '@angular/core';

import { MatToolbarModule, MatButtonModule, MatListModule } from '@angular/material';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { ProfileComponent } from './profile/profile.component';


import { MsalModule, MsalInterceptor } from '@azure/msal-angular';
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';

export const protectedResourceMap: [string, string[]][] = [
  ['https://tenantname.onmicrosoft.com/api', ['user.read']]
];

const isIE = window.navigator.userAgent.indexOf("MSIE ") > -1 || window.navigator.userAgent.indexOf("Trident/") > -1;

@NgModule({
  declarations: [
    AppComponent,
    ProfileComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    BrowserAnimationsModule,
    HttpClientModule,
    MatToolbarModule,
    MatButtonModule,
    MatListModule,
    AppRoutingModule,
    MsalModule.forRoot({
      auth: {
        clientId: 'first-b2c-application-id',
        authority: "https://tenantname.b2clogin.com/tenantname.onmicrosoft.com/b2c_1_signupsignin1",
        validateAuthority: false,
        redirectUri: "http://localhost:4200/",
        postLogoutRedirectUri: "http://localhost:4200/",
        navigateToLoginRequestUrl: true,
      },
      cache: {
        cacheLocation: "localStorage",
        storeAuthStateInCookie: isIE, // set to true for IE 11
      },
    },
    {
      popUp: !isIE,
      consentScopes: [
        "user.read",
        "openid",
        "profile"
      ],
      unprotectedResources: ["https://www.microsoft.com/en-us/"],
      protectedResourceMap,
      extraQueryParameters: {}
    })
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: MsalInterceptor,
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

profile.component.ts

import { Component, OnInit } from '@angular/core';
import { MsalService } from '@azure/msal-angular';
import { HttpClient } from '@angular/common/http';

const GRAPH_ENDPOINT = 'https://my-tenant.onmicrosoft.com/api';

@Component({
  selector: 'app-profile',
  templateUrl: './profile.component.html',
  styleUrls: ['./profile.component.css']
})
export class ProfileComponent implements OnInit {
  profile;

  constructor(private authService: MsalService, private http: HttpClient) { }

  ngOnInit() {
    this.getProfile();
  }

  getProfile() {
    this.http.get(GRAPH_ENDPOINT)
      .toPromise().then(profile => {
        this.profile = profile;
      });
  }

}

Опубликованные области применения веб-API (второе Azure AD B2 C приложение)

  • user.read
  • user.write

1 Ответ

0 голосов
/ 02 марта 2020

В настоящее время доступ к любому API-интерфейсу Microsoft не поддерживается с использованием токена, выданного Azure AD B2 C, то есть с использованием токенов, выпущенных как результат встроенного или пользовательского Azure AD B2 C flow.

Вместо этого для одностраничного приложения для доступа к Microsoft Graph API их необходимо соединить с помощью прокси-API.

...