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-callback
URL. Измените его тип на'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 рекомендуется для всех приложений, включая веб-приложение.