Маркер доступа MSAL не имеет претензий - V2.0 оконечная точка B2C - PullRequest
1 голос
/ 08 июня 2019

Я создал два приложения в моем клиенте Azure AD B2C (XXXX.onmicrosoft.com)

  1. Внешний интерфейс - Angular 7 (настроен как postman)
  2. Backend -Web API - .net core 2.1 (настроен как childcare.webapi)

enter image description here

Проект Web API - это прямой проект .NET Core 2.2 API, создал его с помощью шаблона VS.

appsettings.js файл выглядит как

{
  "AzureAdB2C": {       
    "Instance": "https://login.microsoftonline.com/tfp/",
    "ClientId": "APPLICATOIN-ID-OF-childcare.webapi",
    "Domain": "XXXX.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_Signup"
  }
  "AllowedHosts": "*"
}

Код запуска выглядит так:

public void ConfigureServices(IServiceCollection services)
    {
                services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
                    .AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
                services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

Postmanapp предоставил доступ к childcare.webapi scopes

enter image description here

Затем я отредактировал политику 'B2C_1_Signup' по умолчанию и добавил провайдер идентификации Facebook.Я запустил этот поток пользователей на портале Azure, чтобы получить токен доступа, который мое приложение postman может использовать для доступа к childcare.webapi

enter image description here

, поэтомупока все хорошо.Я получил токен доступа с областью действия 'user_impersonation' Ниже показано, как токен выглядит ...

{
  "iss": "https://login.microsoftonline.com/{GUID}/v2.0/",      
  "aud": "childcare.api APPLICATION ID",
  ...
  "idp": "facebook.com",
  ...
  "tfp": "B2C_1_Signup",      
  "scp": "user_impersonation",
  "azp": "postman app APPLICATION ID",      
}

С помощью этого токена мне удалось успешно вызвать конечную точку childcare.api с помощью приложения почтальона.

enter image description here

Вопрос

Теперь я хочу получить тот же токен доступа в моем приложении Angular 6.Я использую популярную библиотеку "@azure/msal-angular": "^0.1.2"

Ниже приведена моя конфигурация MsalModule.

imports: [
    BrowserModule,
    AppRoutingModule,
    MsalModule.forRoot({
      clientID: 'POSTMAN APP CLIENT ID',
      authority: 'https://login.microsoftonline.com/tfp/XXXX.onmicrosoft.com/B2C_1_Signup', // working     
      validateAuthority: false,
      consentScopes:
      [
        'https://xxxx.onmicrosoft.com/childcare/user_impersonation'
      ]

, а ниже - метод входа в систему.

public login(): void {
    this.authService.loginPopup (['https://XXX.onmicrosoft.com/childcare/user_impersonation']);
}

Мне удалось получитьТок, но он был недействителен для доступа к childcare.webapi. Он вернул мне 404. Когда я тщательно осматриваю токен, отсутствует его user_impersonation область.

Существует открытый вопрос относительно отсутствующей поддержкидля нового домена b2clogin.com.Но один пользователь (Sakta) прокомментировал, что мы можем использовать библиотеку MSAL.js с доменом b2clogin.com.Но у меня это тоже не сработало.

Есть указатели?

Обновление 1 Похоже, что угловая библиотека MSAL возвращает id_token не access token

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...