Azure AD B2C: клиенты должны отправлять client_secret при использовании конфиденциального гранта.

Я пытаюсь настроить аутентификацию для приложения Angular с помощью кода авторизации и Azure AD B2C (oidc-client на стороне клиента), но получаю следующие ошибки от Angular:

После просмотра журналов аудита B2C я обнаружил следующее сообщение об ошибке:

Клиенты должны отправить client_secret при погашении конфиденциального гранта.

Вот моя конфигурация на стороне клиента:

const settings = {
  stsAuthority: 'https://supportodqqcdev.b2clogin.com/supportodqqcDev.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_SignUpSignInOdqPlatine',
  clientId: '8447df5b-35a0-40a7-944f-5dcce87a2193',
  clientRoot: 'https://localhost:4200',
  scope: 'openid https://supportodqqcDev.onmicrosoft.com/platineclientdev/read',
};
this.userManager = new UserManager({
  authority: settings.stsAuthority,
  client_id: settings.clientId,
  redirect_uri: `${settings.clientRoot}/signin-callback`,
  scope: settings.scope,
  response_type: 'code',
  post_logout_redirect_uri: `${settings.clientRoot}/signout-callback`,
  automaticSilentRenew: true,
  silent_redirect_uri: `${settings.clientRoot}/assets/signin-silent-callback.html`,
});

Если я переключу указанную выше конфигурацию на использование локального экземпляра IdentityServer, все будет работать, как ожидалось.

Может ли кто-нибудь указать мне, где и как мне следует расследовать это?

5 ответов

Решение

У меня была такая же проблема, как и у вас, и я просто смог ее решить.

AD запрашивает у вас client_secret, потому что он еще не настроен для PKCE. Чтобы сообщить AD, что вы хотите использовать PKCE для определенного URL-адреса перенаправления, вам необходимо установить его тип из'Web' к 'Spa'. Это можно сделать в манифесте.

Искать недвижимость replyUrlsWithType в Манифесте и ищите свой .../signin-callbackURL. Измените его тип на'Spa' и тебе должно быть хорошо.

например.:

"replyUrlsWithType": [
    {
        "url": "http://localhost:8080/signin-callback",
        "type": "Spa"
    },
]

Настроенный URL-адрес теперь исчезнет с вашей страницы авторизации, но это нормально -> он все еще присутствует в манифесте. Команда MS работает над этим новым типом.

Также убедитесь, что вы отметили свое приложение как общедоступный.

Для получения дополнительной информации см. Мой ответ здесь: Active Directory не поддерживает поток кода авторизации с PKCE?

В приложении Azure AD B2C теперь есть более простой вариант для этого. На вкладке аутентификации, где находятся URI веб-перенаправления, вы, вероятно, увидите сообщение This app has implicit grant settings enabled. If you are using any of these URIs in a SPA with MSAL.js 2.0, you should migrate URIs. Когда вы щелкнете по нему, новое окно позволит вам выбрать, какой URI перенаправления вы хотите вместо этого переместить в URI перенаправления SPA:

После этого просто нажмите Configureи он должен работать. URI перенаправления теперь будет находиться в разделе SPA, а не в веб-разделе.

Я подозреваю, что ваш код в порядке, но...

Последнее, что я слышал, Azure AD не разрешает перекрестные вызовы к конечной точке токена и, следовательно, не поддерживает поток кода авторизации (PKCE), который SPA должны использовать в 2019 году.

Если я не ошибаюсь, это будет означать, что вам нужно использовать (не рекомендуется) неявный поток при интеграции с Azure AD. Проблемы с SPA уже пару лет.

Из интереса я написал пару сообщений о рабочих процессах Azure SPA пару лет назад - я подозреваю, что некоторые из них все еще актуальны:https://authguidance.com/2017/11/30/azure-active-directory-setup/

Ваше изображение показывает ошибку CORS.

Я не уверен, работает ли oidc-client OOTB с B2C. Это больше для identityserver.

Посмотрите на образец msal.js.

В нескольких комментариях я прочитал это как «ADB2C в настоящее время поддерживает поток PKCE для собственных приложений, но не для Интернета». Я знаю, что это немного старая ветка обсуждения, но я просто хотел сообщить, что в настоящее время PKCE рекомендуется для всех приложений, включая веб-приложение.

Источник

Другие вопросы по тегам