Что такое OAuth?
OAuth, или Open Authorization (открытая авторизация) — это протокол авторизации на базе открытого стандарта для делегирования доступа. Это безопасный метод, позволяющий пользователям предоставлять поставщикам услуг (т. е. веб-сайтам и приложениям) доступ к их информации без предоставления им паролей.
OAuth обеспечивает клиентам безопасный делегированный доступ к ресурсам сервера от имени владельца сервера. Конкретные потоки авторизации позволяют клиенту получить доступ к защищенным ресурсам без необходимости указывать свой пароль. Вместо этого клиент использует токены доступа, которые может утвердить владелец ресурса, чтобы предоставить ему доступ к этому ресурсу.
Что такое токены OAuth?
Токены OAuth предоставляют пользователю доступ к ресурсам. Другими словами, они не служат для аутентификации пользователей, а используются поставщиком услуг для авторизации доступа к другим ресурсам от имени пользователя.
Транзакция OAuth происходит, когда пользователь запрашивает разрешение у другого ресурса, используя его идентификатор поставщика услуг. Ресурс запрашивает у поставщика услуг разрешение, которое предоставляется в виде токена запроса и секретного ключа. Далее ресурс перенаправляет пользователя к поставщику услуг для аутентификации запроса. На этом этапе ресурс обменивает токен запроса на токен доступа и секретный ключ. Если два токена имеют один и тот же секретный ключ, процесс OAuth завершен, и пользователь успешно делегировал поставщику услуг доступ к ресурсу.
Процесс OAuth
Шаг 1
Запрос доступа
Анна отправляет на YouTube (ресурс) запрос на размещение видео непосредственно в ленте Twitter (поставщик услуг). Затем YouTube запрашивает у Twitter разрешение на доступ.
Шаг 2
Обмен токена запроса и секретного ключа
Twitter предоставляет YouTube токен запроса и секретный ключ.
Шаг 3
Аутентификация
YouTube перенаправляет Анну для входа в систему Twitter. Анна предоставляет Twitter свои учетные данные и подтверждает, что запрос от YouTube был инициирован пользователем.
Шаг 4
Обмен токенами доступа
После того как пользователь проверит подлинность запроса, сервис YouTube обратится к сервису Twitter для обмена токена запроса и секретного ключа на токен доступа. Если секретные ключи, связанные с токенами, совпадают, Twitter предоставит YouTube токен доступа и откроет доступ к YouTube.
Шаг 5
Доступ предоставлен
Теперь Анна может безопасно использовать YouTube для размещения видео непосредственно в своей ленте Twitter.
Приведенный выше пример иллюстрирует общий процесс OAuth. Протокол OAuth также обеспечивает более детальный контроль и управление разрешениями, в том числе право пользователя отзывать токены по желанию и определение разных уровней доступа к поставщикам услуг для разных ресурсов.
OAuth 1.0 и OAuth 2.0
В 2012 году был представлен протокол OAuth 2.0 в качестве существенно переработанного протокола OAuth 1.0. Изменения, внесенные в эту версию OAuth, были насколько значительными, что версии 2.0 и 1.0 оказались несовместимыми. Протокол OAuth 2.0 был разработан для устранения уязвимости в процедуре авторизации OAuth, связанной с фиксацией сеанса.
Хотя эта проблема решена в OAuth 2.0, в новой версии преднамеренно не определяется и не поддерживается шифрование, подпись, проверка клиента или привязка канала, а вместо этого требуется, чтобы специалисты по внедрению использовали для этой цели другой протокол безопасности, например HTTPS/TLS.
Ниже приводятся различия между OAuth 1.0 и 2.0.
OAuth и SAML: в чем разница?
SAML — это вариант языка XML, который описывает концепцию, позволяющую одному устройству выполнять как аутентификацию, так и авторизацию от имени одного или нескольких устройств.
С появлением простых форматов кодирования данных, таких как JSON, протокол OAuth стал использоваться и для мобильных устройств. Хотя Oauth — относительно новый протокол, возникший в результате необходимости замены SAML, оба протокола крайне важны для безопасного единого входа (SSO).
Другими словами, OAuth не является альтернативой SAML, поскольку оба протокола могут дополнять друг друга. Например, в среде единого входа протокол SAML может отвечать за аутентификацию (аутентификацию пользователя и предоставление ему доступа), а OAuth — за авторизацию (предоставление доступа к определенным защищенным ресурсам).