Если вы посмотрите на поток кода авторизации типа OAuth , да, есть два актуария:
1. <user_session_id, client_id> => authorization_code
2. <client_id, redirect_uri, authorization_code, client_secret> => access_token, refresh_token
В шаге 1: пользователь сообщает серверу OAuth, что «IЯ хочу авторизовать этот клиент (client_id) для доступа к моему ресурсу. Вот моя аутентификация (user_session_id или что еще) "
На шаге 2: client (client_id) сообщает серверу OAuth, что" у меня есть пользовательавторизация (код авторизации), пожалуйста, дайте мне токен доступа для последующего доступа. И это моя аутентификация (client_id & client_secret) "
Видите ли, если мы пропустим шаг 2, тогда не будет никакой гарантии для аутентификации клиента,Любой клиент может вызвать step1 с другим client_id и получить токен доступа для этого client_id вместо своего собственного.Вот почему нам нужен шаг 2.
Если вы действительно хотите объединить step1 и step2, вы можете сделать что-то вроде этого:
<client_id, redirect_uri, client_secret> => access_token, refresh_token
Мы используем этот подход в нашей платформе Open Api, и мы не нашли никакой защитыпроблема еще не решена.
Кстати, действительно существует Неявный тип предоставления , то есть:
<client_id, redirect_uri> => access_token, refresh_token
Обычно применяется только к клиентским приложениям, у которых нет серверабэкенд.В этом случае сервер OAuth должен убедиться, что URI перенаправления принадлежит этому клиенту (например, то же самое с регистром redirect_uri)