В oauth вы делаете запрос, используя свой идентификатор клиента / секрет, чтобы получить код авторизации.
Запрос кода авторизации не содержит секрет клиента.Он содержит только идентификатор клиента и URL-адрес перенаправления, которые позволяют серверу авторизации проверять запрос, исходящий от известного клиента.
Что требуется для этого двухэтапного процесса вместо получения токена доступа в первую очередь?Как это делает весь процесс более безопасным?Или есть другая причина.
Если мы забудем о неявном потоке, который включает в себя получение токена доступа из первого вызова, я бы сказал, что это повышает безопасность.
Когда используется поток кода авторизации, вы используете пользовательский агент (браузер) для запуска потока.Это означает, что пользовательский агент будет перенаправлять конечного пользователя на сервер авторизации для аутентификации (получение пароля пользователя и проверка конечного пользователя).Если проверка конечного пользователя прошла успешно, сервер авторизации отправляет код авторизации.Это временный секрет, связанный с исходным запросом кода авторизации.
Теперь клиент использует код авторизации и напрямую обращается к серверу авторизации для получения токенов доступа (и других).Этот второй шаг происходит за пределами пользовательского агента.
Если клиент является конфиденциальным клиентом, клиентом, который имеет идентификатор клиента, а также секрет клиента, этот второй вызов потребует создания этого секрета клиента.Так что он внутренне содержит процесс проверки клиента.С точки зрения сервера авторизации, запрос токена будет отклонен, если аутентификация клиента не удалась.Это дает защиту для кражи кода авторизации.
Кроме того, на втором этапе мы избегаем доступа к токену доступа третьей стороне.Например, в неявном потоке токен доступа отправляется в виде фрагментов URL через пользовательский агент.Если пользовательский агент скомпрометирован (например: - Управляется каким-либо вредоносным кодом), этот маркер доступа может быть извлечен.
А как насчет публичных клиентов?Это означает, что клиенты, которые не получают секрет клиента из-за их характера (например: - клиенты, которые не могут защитить секрет путем хранения)
публичные клиенты используют PKCE .Это необходимо использовать, чтобы избежать кражи кода авторизации.Таким образом, в запросе токена (второй вызов) клиент будет напрямую отправлять верификатор кода.Пользовательский агент не может получить верификатор кода в первом запросе, поскольку он был хеширован (вызов кода).Таким образом, запрос токена теперь содержит секрет, который известен только клиенту и серверу авторизации.
Если вы сравните оба сценария (общедоступный и конфиденциальный клиенты), вы увидите, как второй вызов добавляет дополнительный уровень безопасности.