Я не знаю, есть ли у меня какое-то слепое пятно или что-то еще, но я много раз читал спецификацию OAuth 2 и просматривал архивы списков рассылки, и мне еще предстоит найти хорошее объяснение, почему неявное предоставление разработан поток для получения токенов доступа. По сравнению с предоставлением кода авторизации, кажется, что он просто отказывается от аутентификации клиента без какой-либо веской причины. Как это «оптимизировано для клиентов, реализованных в браузере, использующем язык сценариев» (чтобы процитировать спецификацию)?
Оба потока начинаются одинаково (источник: http://tools.ietf.org/html/draft-ietf-oauth-v2-22):
- Клиент инициирует поток, направляя пользовательский агент владельца ресурса к конечной точке авторизации.
- Сервер авторизации аутентифицирует владельца ресурса (через пользовательский агент) и устанавливает, предоставляет ли владелец ресурса или отклоняет запрос доступа клиента.
- Assuming the resource owner grants access, the authorization server redirects the user-agent back to the client using the redirection URI provided earlier (in the request or during client registration).
- The redirection URI includes an authorization code (Authorization code flow)
- URI перенаправления включает токен доступа во фрагмент URI (неявный поток)
Вот где потоки расходятся. В обоих случаях URI перенаправления на этом этапе указывает на некоторую конечную точку, размещенную у клиента:
- В потоке кода авторизации, когда пользовательский агент попадает в эту конечную точку с кодом авторизации в URI, код в этой конечной точке обменивается кодом авторизации вместе со своими учетными данными клиента на токен доступа, который он затем может использовать по мере необходимости. Он мог бы, например, записать его на веб-страницу, к которой сценарий на странице мог бы получить доступ.
- Неявный поток полностью пропускает этот шаг аутентификации клиента и просто загружает веб-страницу с клиентским скриптом. Здесь есть забавный трюк с фрагментом URL-адреса, который предотвращает чрезмерную передачу токена доступа, но конечный результат по сути тот же: сайт, размещенный на клиенте, обслуживает страницу с некоторым скриптом в нем, который может захватить токен доступа. .
Отсюда мой вопрос: что здесь было получено, пропустив этап аутентификации клиента?