Я не знаю, есть ли у меня какое-то слепое пятно или что, но я много раз читал спецификацию OAuth 2 и просматривал архивы списков рассылки, и мне еще предстоит найти хорошее объяснение того, почему Был разработан поток неявных грантов для получения токенов доступа. По сравнению с грантом авторизационного кода, похоже, он просто отказывается от аутентификации клиента без каких-либо серьезных оснований. Как это "оптимизировано для клиентов, реализованных в браузере с использованием языка сценариев" (чтобы указать спецификацию)?
Оба потока начинаются одинаково (источник: http://tools.ietf.org/html/draft-ietf-oauth-v2-22):
- Клиент инициирует поток, направляя пользовательский агент владельца ресурса в конечную точку авторизации.
- Сервер авторизации аутентифицирует владельца ресурса (через пользовательского агента) и устанавливает, предоставляет ли владелец ресурса или отклоняет запрос доступа клиента.
- Предполагая, что владелец ресурса предоставляет доступ, сервер авторизации перенаправляет пользовательский агент обратно клиенту с использованием URI перенаправления, предоставленного ранее (в запросе или во время регистрации клиента).
- URI перенаправления включает в себя код авторизации (поток кода авторизации)
- URI перенаправления включает маркер доступа в фрагменте URI (неявный поток)
Здесь, где потоки расщепляются. В обоих случаях URI перенаправления в этой точке относится к некоторой конечной точке, размещенной клиентом:
- В потоке кода авторизации, когда пользовательский агент удаляет эту конечную точку с помощью кода авторизации в URI, код в этой конечной точке обменивает код авторизации вместе со своими учетными данными клиента для токена доступа, который он может затем использовать по мере необходимости. Он может, например, записать его на веб-страницу, доступ к которой может получить script на странице.
- Неявный поток полностью пропускает этот шаг аутентификации клиента и просто загружает веб-страницу с клиентом script. Там есть симпатичный трюк с фрагментом URL-адреса, который слишком сильно пропускает токен доступа, но конечный результат по существу тот же: сайт, размещенный на клиенте, обслуживает страницу с некоторым script в ней, который может захватывать токен доступа.
Отсюда мой вопрос: что было получено здесь, пропустив шаг проверки подлинности клиента?