#azure #rest #oauth-2.0 #oauth
#azure #rest #oauth-2.0 #oauth
Вопрос:
Я пишу проект, состоящий из SPA и API. В SPA у меня есть кнопка для привязки учетных записей Google или Microsoft к учетной записи пользователя. API может всякий раз, когда захочет, вызывать API-интерфейсы Google / Microsoft.
Я добился успеха с помощью Google, используя поток кода авторизации:
- Из SPA перенаправление пользователя на https://accounts.google.com/o/oauth2/v2/auth с параметрами запроса response_type=code и access_type=offline
- Отправьте возвращенный код в API
- Вызов API https://oauth2.googleapis.com/token чтобы получить access_token и refresh_token
- Токены сохраняются в базе данных и могут использоваться всякий раз, когда этого хочет API.
==============
Microsoft имеет аналогичный поток авторизации (https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow ) но я не могу использовать authorization_code, полученный из SPA, в API из-за политик CORS. Я не использую коды PKCE, потому что токены извлекаются из API, которые используют client_id и client_secret.
=============
Я что-то упустил? Возможно ли вообще получить authorization_code из SPA и использовать его для генерации access_tokens и refresh_tokens из внешнего API?
Большое вам спасибо, извините за мой английский!
Ответ №1:
В SPA многие серверы авторизации и поставщики удостоверений не поддерживают запросы CORS, в таком случае ваш вариант — использовать поток неявного предоставления Azure AD, а не поток кода авторизации, вы можете получить токен доступа напрямую через /authorize
конечную точку. Этот поток не предоставляет токены обновления, поэтому ваше приложение должно быть готово периодически обновлять эти токены.
Ссылка — платформа идентификации Microsoft и неявный поток предоставления