Поток кода авторизации с PKCE в Angular с angular-oauth2-oidc

Я хочу использовать поток кода с PKCE в моем Angular SPA, и для удобства я использую эту библиотеку: angular-oauth2-oidc

Если вы нажмете на ссылку, будет сказано, что с этой конфигурацией вы будете использовать поток кода с PKCE:

      let authConfig: AuthConfig = {
      issuer: 'https://myIssuerURL.com',
      redirectUri: 'https://myRedirectURI.com',
      clientId: environment.myclientId,
      scope: 'openid',
      responseType: 'code',
      showDebugInformation: true,
    };

Я запускаю поток с помощью этой команды, когда пользователь нажимает кнопку входа в систему:

      this.oauthService.initCodeFlow();

Это работает, и я получаю доступ и токен идентификатора, но как я могу быть уверен, что использую поток кода с PKCE, а не просто нормальный поток кода без PKCE? Все ли создание и хранение кода вызова и верификатора выполняется за меня библиотекой? Есть ли способ остановить процесс и увидеть код авторизации или запрос кода?

Это может быть странный вопрос, но я просто хочу убедиться, что он использует PKCE...

3 ответа

Решение

Я почти уверен, что это так - способ быть уверенным - это отслеживать сетевые сообщения и искать параметры code_challenge и code_challenge_method в перенаправлении авторизации. См. Шаги 4 и 8 моей страницы сообщений OAuth SPA, чтобы узнать, как это должно выглядеть.

другой способ основан на вашей конфигурации эмитента удостоверений. Если он устанавливает, что требуется, чтобы pkce был истинным, вы в чистом виде

      import { NgModule } from '@angular/core';
import { AuthModule } from 'angular-auth-oidc-client';


@NgModule({
    imports: [AuthModule.forRoot({
        config: {
            authority: 'https://login.microsoftonline.com/v2.0',
            //authWellknownEndpoint: 'https://login.microsoftonline.com/common/v2.0',
            redirectUrl: window.location.origin,
            clientId: '',
            scope: 'openid profile offline_access email', // 'openid profile offline_access ' + your scopes
            responseType: 'code',
            silentRenew: true,
            useRefreshToken: true,
            maxIdTokenIatOffsetAllowedInSeconds: 600,
            issValidationOff: false,
            autoUserInfo: false,
            customParamsAuthRequest: {
              prompt: 'consent', // login, consent
            },
    }
      })],
    exports: [AuthModule],
})
export class AuthConfigModule {}
Другие вопросы по тегам