Вопрос по потоку авторизации OAuth 2.0 - PullRequest
1 голос
/ 31 января 2020

Я смотрю на это изображение из Microsoft OAuth2 flow , и у меня есть вопрос

enter image description here

Диалог браузера всплывает, где они вводят свои учетные данные и согласие на разрешения; взамен я получаю authorizationCode. С этим authorizationCode я должен сделать запрос к /oauth2/token и получить взамен access_token и refresh_token.

. Чтобы получить access_token и refresh_token, мне нужно объединить authorizationCode с clientSecret.

Мой вопрос: кто должен запросить access_token? веб-интерфейс или бэкэнд ?

Я получаю authorizationCode и отправляю его бэкэнду, который содержит clientSecret и делает некоторые волхвы c и возвращает мне access_token, что я могу использовать для проверки WebAPI? Или все должно быть сделано на веб-интерфейсе и отправлено в API напрямую access_token?

Спасибо!

1 Ответ

0 голосов
/ 31 января 2020

Я думаю, что лучше всего было бы использовать Proof Key для Code Exchange (PKCE) вместо пароля. Microsoft поддерживает его , см. auth параметры запроса code_challenge и code_challenge_method. Затем есть параметр code_verifier для конечной точки token, который вы используете вместо пароля. Существует также OAuth 2.0 для собственных приложений RF C, в котором говорится:

Publi c нативные клиенты приложений ДОЛЖНЫ реализовывать проверочный ключ для обмена кодами (PKCE [RFC7636 ]) расширение к OAuth, и серверы авторизации ДОЛЖНЫ поддерживать PKCE для таких клиентов

Пример: перед выполнением запроса авторизации вы генерируете случайный текст (позже используемый как code_verifier), затем создаете его SHA-256 га sh (используйте как code_challenge), и вы сообщаете серверу аутентификации, что вы использовали SHA-256 с &code_challenge_method=S256. Сервер аутентификации сохраняет эти значения, и когда вы запрашиваете у конечной точки token токены, он создает собственный SHA-256 га sh из значения code_verifier. Если значение ha sh равно code_challenge, которое вы отправили ранее, сервер примет запрос.

...