Подтвердить что ты не робот

OAuth2: строка запроса против фрагмента

Просто заметил, что в OAuth2, когда запрошенный тип гранта: "код", обратный вызов содержит его в параметрах строки запроса (после "?" ). Однако, когда грант является "токеном", он передается как фрагмент (после "#" ).

Это выглядит как часть спецификации (http://tools.ietf.org/html/draft-ietf-oauth-v2-26#section-4.2)

Что может быть обоснованием такого решения?

Спасибо, Петр

4b9b3361

Ответ 1

Когда ваш браузер перенаправляется веб-сайтом на URL с параметром запроса, строка запроса также является частью запроса, который ваш браузер теперь отправляет хосту. Фрагменты оцениваются локально только вашим веб-браузером и не включены в запрос хосту.

В случае Гранта авторизационного кода, где у вас обычно есть веб-приложение, которое напрямую общается с провайдером, отправка данных на хост именно то, что вам нужно:

  • Веб-приложение перенаправляет ваш браузер поставщику, в который вы входите.
  • Поставщик теперь сообщает вашему браузеру URL-адрес обратного вызова веб-приложения и добавляет код авторизации. Этот код должен быть отправлен в веб-приложение, поэтому он включается в качестве параметра запроса в запрос URL-адреса обратного вызова.
  • Теперь веб-приложение ведет переговоры с провайдером в фоновом режиме и проверяет с помощью кода авторизации, что ему действительно разрешено запрашивать у провайдера токен доступа.

В случае Неявный Грант у вас обычно есть приложение Javascript, которое работает прямо в вашем браузере. Нет необходимости передавать какой-либо код авторизации на хост, и в большинстве случаев также нет необходимости отправлять токен доступа хосту, поскольку JS в браузере может напрямую поговорить с провайдером. Таким образом, вы можете, например, создать веб-сайт на сервере, который использует информацию, запрашиваемую у другого поставщика, с согласия пользователя, когда сервер никогда не получает доступа к каким-либо конфиденциальным данным пользователя. (В случае надежного веб-сайта, который не отправляет токен доступа на сервер.)