
- •OAuth - безопасный протокол кросс-авторизации веб-сайтов
- •Веб-сервисы - 1 этап
- •Веб-сервисы - 2 этап
- •URL – как способ передачи параметров
- •Веб-сервисы - 3 этап
- •Современная ситуация
- •Чем OAuth отличается от OpenID?
- •Аутентификация
- •Авторизация
- •Проблемы доверия
- •OAuth
- •Терминология-1
- •Терминология-2
- •Терминология
- •Наглядный пример
- •Jane имеет пароль на Faji
- •Jane имеет пароль на Beppa, Beppa имеет токен от Faji
- •Клиент в фоне получает от сервера временный токен
- •Браузер Jane направляют на Faji, добавив в параметры временный токен
- •На основе данных токена Jane информируют, кому и какие права она временно передаёт
- •Jane с её временным токеном возвращают на Beppa
- •Beppa в фоне обращается к Faji и, если
- •Страница Jane обновляется, на ней отображаются доступные для печати снимки
- •Криптография
- •Другие проблемы с безопасностью
- •Заключение
- •Основные сведения о маркерах OAuth
- •Этапы процесса аутентификации
- •Настройка аутентификации OAuth
- •Использование OAuth
- •Параметр
- •Предусмотрены три способа задания этих параметров.
- •В примере запрашивается маркер, необходимый для доступа к аккаунтам Календаря и Picasa пользователя.
- •Об ответе
- •Шаг 2. Авторизация маркера запроса
- •Об ответе
- •Шаг 3. Обмен маркера запроса на маркер доступа
- •Параметр Описание
- •Пример запроса
- •Подписание запросов, использующих аутентификацию OAuth
- •Схема процесса
- •На этом рисунке показаны следующие шаги.
- •Ссылки

Параметр |
Описание |
oauth_consumer |
Это значение определяет связанный с приложением домен, который должен |
_key |
совпадать с доменом, зарегистрированным в Google. |
oauth_signature |
Это значение указывает алгоритм формирования подписи, использовавшийся для |
_method |
подписания запроса. Поддерживаемыми значениями для этого параметра |
|
являются RSA-SHA1 и HMAC-SHA1. |
oauth_signature |
Это значение указывает строку (подпись), созданную с использованием |
|
вышеозначенного метода подписания. Дополнительные сведения см. в разделе |
|
Подписание запросов, использующих аутентификацию OAuth. |
oauth_timestam |
Это значение указывает время, когда был отправлен запрос. Временная метка |
p |
должна быть представлена количеством секунд после 1 января 1970 г., 00:00:00 |
|
GMT. |
oauth_nonce |
Это значение является случайным 64-разрядным беззнаковым числом, |
|
представленным строкой ASCII-символов в десятичном формате. Пара текущее |
|
время/временная метка должна всегда быть уникальна для предотвращения |
|
взлома путем замещения оригинала. |
oauth_version |
Это значение указывает версию OAuth, которую должен использовать Google для |
|
обработки запроса. Значение по умолчанию – 1.0. Если в запрос включен этот |
|
параметр, он должен иметь значение 1.0. |
scope |
Это значение указывает службу, к которой вы пытаетесь получить доступ для |
|
совершения прошедших аутентификацию запросов. Этот параметр используется |
|
только для Google и не определен в стандарте OAuth. Установите значение этого |
|
параметра равнымhttp://gdata.youtube.com. |
Предусмотрены три способа задания этих параметров.
•Включение параметров в
заголовок Authorization запросов GET или POST. Пример запроса, приведенный ниже, показывает, как задать эти значения в заголовке Authorization. Обратите внимание, что
параметр scope не может быть задан в заголовке. Параметр "scope" можно указывать в виде параметра URL запроса или в теле запроса POST.
•Указание параметров в теле запроса POST. Если выбран этот метод, необходимо задать значение заголовка запросаContent-Type равным application/x- www-form-urlencoded.
•Включение параметров в URL запроса GET.
В примере запрашивается маркер, необходимый для доступа к аккаунтам Календаря и Picasa пользователя.
POST /accounts/OAuthGetRequestToken HTTP/1.1 Host: https://www.google.com
Content-Type: application/x-www-form-urlencoded Authorization: OAuth
oauth_consumer_key="example.com", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY
%3D",
oauth_timestamp="137131200",
oauth_nonce="4572616e48616d6d65724c61686176", oauth_version="1.0"
scope=http://gdata.youtube.com
Об ответе
Если запрос выполнен успешно, то Google отвечает сообщением HTTP 200, которое содержит маркер запроса и секретную часть маркера. Приложению необходимо выполнить синтаксический анализ, выделив маркер из ответа. Если не удалось успешно обработать запрос, то Google возвращает сообщение HTTP 400 (Запрос отклонен). Такой ответ может указывать на то, что запрос имеет неверный формат, в нем содержатся неподдерживаемые параметры, отсутствуют необходимые параметры, использован неподдерживаемый метод подписи или имеются какие-то другие ошибки в формате или содержании. Этот ответ может также указывать на то, что у Google есть основания полагать, что запрашивающий – злоумышленник.
В следующем примере показан успешный ответ на запрос маркера.
oauth_token=ab3cd9j4ks73hf7g&oauth_token_secret=ZXhhbXBsZS5jb20

Шаг 2. Авторизация маркера запроса
После получения маркера запроса перенаправьте пользователя на https://www.google.com/accounts/OAuthAuthorizeToken. Добавьте в URL следующие параметры запроса.
Параметр Описание
oauth_token Этот обязательный параметр задает полученный от Google маркер запроса.
oauth_callback Этот необязательный параметр задает URL, на который будет перенаправлен пользователь после того, как приложение получит доступ к своему аккаунту на YouTube. URL может включать параметры запроса. Если не задан URL обратного вызова, то Google выводит страницу подтверждения авторизации маркера пользователя. Обратите внимание, что указание URL обратного вызова дает возможность автоматически перенаправить пользователя к приложению после входа в систему.
Пример запроса В следующем примере показан запрос для авторизации маркера.
https://www.google.com/accounts/OAuthAuthorizeToken? oauth_token=ab3cd9j4ks73hf7g&oauth_callback=http%3A%2F%2Fwww.example.com
Об ответе
Если Google примет этот запрос, то пользователь будет перенаправлен на страницу входа в YouTube. После входа пользователя служба аутентификации отображает страницу, информирующую его о том, что приложению требуется доступ к аккаунту пользователя на YouTube. На странице запрашивается подтверждение пользователя на доступ приложения к его аккаунту.
Если пользователь предоставил приложению доступ, то он перенаправляется на URL обратного вызова, заданный в запросе на авторизацию маркера. Если пользователь запретил доступ, то он будет перенаправлен на страницу, содержащую ссылки на сайт и на YouTube.
Следующий URL показывает формат перенаправления на URL обратного вызова с авторизованным маркером запроса. Авторизованный маркер запроса имеет то же значение, что и неавторизованный маркер, отправленный в запросе. Значением является текстовая строка длиной до 256 байт.
http://www.example.com/ytapi.html?oauth_token=CKF50YzIHxCT85KMAg
Шаг 3. Обмен маркера запроса на маркер доступа
После авторизации маркера запроса пользователя приложение может обменять этот маркер на маркер доступа. Маркер доступа позволяет отправлять удостоверенные запросы к API YouTube от имени конкретного пользователя. Время действия маркеров доступа не ограничено, они работают как маркеры сеанса AuthSub.
Чтобы заменить авторизованный маркер запроса маркером доступа, отправьте подписанный запрос HTTP на https://www.google.com/accounts/OAuthGetAccessToken со следующими параметрами запроса. Обратите внимание, что все эти параметры,
кроме oauth_token, также используются (в том же контексте) в запросах для получения маркера запроса. Единственным необязательным параметром является oauth_version, все остальные обязательны.

Параметр Описание
oauth_consumer Это значение определяет связанный с приложением домен, который _key должен совпадать с доменом, зарегистрированным в Google. Это
значение не должно отличаться от значения, представленного в запросе на получение маркера запроса.
oauth_token Оно определяет авторизованный маркер запроса.
oauth_signature_ Это значение указывает алгоритм формирования подписи, method использовавшийся для подписания запроса. Поддерживаемыми
значениями для этого параметра являются RSA-SHA1 и HMAC-SHA1.
oauth_signature Это значение указывает строку (подпись), созданную с использованием вышеозначенного метода подписания.
oauth_timestamp Это значение указывает время, когда был отправлен запрос. Временная метка должна быть представлена количеством секунд после 1 января 1970 г., 00:00:00 GMT.
oauth_nonce Это значение является случайным 64-разрядным беззнаковым числом, представленным строкой ASCII-символов в десятичном формате. Пара текущее время/временная метка должна всегда быть уникальна для предотвращения взлома путем замещения оригинала.
oauth_version Это значение указывает версию OAuth, которую должен использовать Google для обработки запроса. Значение по умолчанию – 1.0. Если в запрос включен этот параметр, он должен иметь значение 1.0.
Пример запроса
Следующий пример меняет маркер запроса на маркер доступа.
POST /accounts/OAuthGetAccessToken HTTP/1.1 Host: https://www.google.com
Content-Type: application/x-www-form-urlencoded Authorization: OAuth
oauth_consumer_key="example.com", oauth_token="CKF50YzIHxCT85KMAg", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d65724c61686176", oauth_version="1.0«
ОБ ОТВЕТЕ
Если запрос маркера доступа обработан успешно, то Google отвечает сообщением HTTP 200, которое содержит маркер доступа и секретную часть маркера. В следующем примере показан образец ответа, содержащего маркер доступа OAuth.
oauth_token=ab3cd9j4ks73hf7g&oauth_token_secret=ZXhhbXBsZS5jb20
Google может отклонить запрос маркера, если он имеет неверный формат или есть основания полагать, что запрашивающий – злоумышленник. В этом случае возвращается код ответа HTTP 400 ("Запрос отклонен").
Подписание запросов, использующих аутентификацию OAuth
Все запросы на получение или использование маркера OAuth должны быть подписаны. Это требование относится к вызовам для получения маркера запроса и маркера доступа, а также ко всем запросам к API данных YouTube, которые требуют аутентификации, например запросам на добавление видео или его рейтинга.
Следующие шаги описывают процедуру формирования подписи запросов, в которых используется аутентификация OAuth.
Параметр oauth_signature_method служит для указания алгоритма подписи запроса. Google поддерживает алгоритмы формирования подписи RSA-SHA1 и HMAC-SHA1.
Создайте подпись base string, состоящую из трех элементов запроса, разделенных амперсандами (&). Обратите внимание, что все имена параметров, а также их значения должны быть закодированы согласно спецификации OAuth.
Первый элемент определяет метод HTTP-запроса (GET, POST и т. д.).
Второй элемент задает базовый URL для этого запроса, который не должен включать параметры. Например, если URL запроса равен http://gdata.youtube.com/feeds/api/videos? q=football&orderby=published&v=2, то базовый URL будет равен http://gdata.youtube.com/feeds/api/ videos.
Третий элемент содержит нормализованную строку параметра и его значения. Эта строка должна включать все параметры запроса, заданные в URL запроса, а также все параметры OAuth, кроме oauth_signature. Способ нормализации строки определяется спецификацией OAuth.
Создайте oauth_signature с использованием указанного oauth_signature_method.
Если используется алгоритм RSA-SHA1, то сформируйте подпись с помощью закрытого ключа, соответствующего сертификату, который был добавлен на Google во время регистрации. Если используется алгоритм HMAC-SHA1, создайте подпись с использованием значения "consumer secret", сформированного во время регистрации. Это значение отображается
на странице регистрации вашего домена.
В спецификации OAuth приведен пример запроса, который может быть использован для проверки подписи HMAC-SHA1. Пример включает базовую строку подписи и ключ HMAC-SHA1, а также сформированный дайджест (подпись) HMAC-SHA1.