Поток кода авторизации с 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 {}