OAuth 2.0 простым и понятным языком

На хабре уже писали про OAuth 1.0, но понятного объяснения того, что такое OAuth 2.0 не было. Ниже я расскажу, в чем отличия и преимущества OAuth 2.0 и, как его лучше использовать на сайтах, в мобильных и desktop-приложениях.
Что такое OAuth 2.0
OAuth 2.0 — протокол авторизации, позволяющий выдать одному сервису (приложению) права на доступ к ресурсам пользователя на другом сервисе. Протокол избавляет от необходимости доверять приложению логин и пароль, а также позволяет выдавать ограниченный набор прав, а не все сразу.
Чем отличаются OpenID и OAuth
Не смотря на то, что объяснений на эту тему уже было много, она по-прежнему вызывает некоторое непонимание.
OpenID предназначен для аутентификации — то есть для того, чтобы понять, что этот конкретный пользователь является тем, кем представляется. Например, с помощью OpenID некий сервис Ололо может понять, что зашедший туда пользователь, это именно Рома Новиков с Mail.Ru. При следующей аутентификации Ололо сможет его опять узнать и понять, что, это тот же Рома, что и в прошлый раз.
OAuth же является протоколом авторизации, то есть позволяет выдать права на действия, которые сам Ололо сможет производить в Mail.Ru от лица Ромы. При этом Рома после авторизации может вообще не участвовать в процессе выполнения действий, например, Ололо сможет самостоятельно заливать фотографии на Ромин аккаунт.
Как работает OAuth 2.0
Как и первая версия, OAuth 2.0 основан на использовании базовых веб-технологий: HTTP-запросах, редиректах и т. п. Поэтому использование OAuth возможно на любой платформе с доступом к интернету и браузеру: на сайтах, в мобильных и desktop-приложениях, плагинах для браузеров…
Ключевое отличие от OAuth 1.0 — простота. В новой версии нет громоздких схем подписи, сокращено количество запросов, необходимых для авторизации.
- получение авторизации
- обращение к защищенным ресурсам
- авторизация для приложений, имеющих серверную часть (чаще всего, это сайты и веб-приложения)
- авторизация для полностью клиентских приложений (мобильные и desktop-приложения)
- авторизация по логину и паролю
- восстановление предыдущей авторизации
Авторизация для приложений, имеющих серверную часть

- Редирект на страницу авторизации
- На странице авторизации у пользователя запрашивается подтверждение выдачи прав
- В случае согласия пользователя, браузер редиректится на URL, указанный при открытии страницы авторизации, с добавлением в GET-параметры специального ключа — authorization code
- Сервер приложения выполняет POST-запрос с полученным authorization code в качестве параметра. В результате этого запроса возвращается access token
Это самый сложный вариант авторизации, но только он позволяет сервису однозначно установить приложение, обращающееся за авторизацией (это происходит при коммуникации между серверами на последнем шаге). Во всех остальных вариантах авторизация происходит полностью на клиенте и по понятным причинам возможна маскировка одного приложения под другое. Это стоит учитывать при внедрении OAuth-аутентификации в API сервисов.
Пример
Здесь и далее примеры приводятся для API Mail.Ru, но логика одинаковая для всех сервисов, меняются только адреса страниц авторизации. Обратите внимание, что запросы надо делать по HTTPS.
Редиректим браузер пользователя на страницу авторизации:
> GET /oauth/authorize?response_type=code&client_id=464119& redirect_uri=http%3A%2F%2Fexample.com%2Fcb%2F123 HTTP/1.1 > Host: connect.mail.ru
Здесь и далее, client_id и client_secret — значения, полученные при регистрации приложения на платформе.
После того, как пользователь выдаст права, происходит редирект на указанный redirect_uri:
Обратите внимание, если вы реализуете логин на сайте с помощью OAuth, то рекомендуется в redirect_uri добавлять уникальный для каждого пользователя идентификатор для предотвращения CSRF-атак (в примере это 123). При получении кода надо проверить, что этот идентификатор не изменился и соответствует текущему пользователю.
Используем полученный code для получения access_token, выполняя запрос с сервера:
> POST /oauth/token HTTP/1.1 > Host: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=authorization_code&client_id=464119&client_secret=deadbeef&code=DoRieb0y& redirect_uri=http%3A%2F%2Fexample.com%2Fcb%2F123 < HTTP/1.1 200 OK < Content-Type: application/json
Обратите внимание, что в последнем запросе используется client_secret, который в данном случае хранится на сервере приложения, и подтверждает, что запрос не подделан.
В результате последнего запроса получаем сам ключ доступа (access_token), время его «протухания» (expires_in), тип ключа, определяющий как его надо использовать, (token_type) и refresh_token о котором будет подробнее сказано ниже. Дальше, полученные данные можно использовать для доступа к защищенным ресурсам, например, API Mail.Ru:
> GET /platform/api?oauth_token=SlAV32hkKG&client_id=464119&format=json&method=users.getInfo& sig=. HTTP/1.1 > Host: appsmail.ru
Авторизация полностью клиентских приложений

- Открытие встроенного браузера со страницей авторизации
- У пользователя запрашивается подтверждение выдачи прав
- В случае согласия пользователя, браузер редиректится на страницу-заглушку во фрагменте (после #) URL которой добавляется access token
- Приложение перехватывает редирект и получает access token из адреса страницы
Этот вариант требует поднятия в приложении окна браузера, но не требует серверной части и дополнительного вызова сервер-сервер для обмена authorization code на access token.
Пример
Открываем браузер со страницей авторизации:
> GET /oauth/authorize?response_type=token&client_id=464119 HTTP/1.1 > Host: connect.mail.ru
После того, как пользователь выдаст права, происходит редирект на стандартную страницу-заглушку, для Mail.Ru это connect.mail.ru/oauth/success.html:
Приложение должно перехватить последний редирект, получить из адреса acess_token и использовать его для обращения к защищенным ресурсам.
Авторизация по логину и паролю
Авторизация по логину и паролю представляет простой POST-запрос, в результате которого возвращается access token. Такая схема не представляет из себя ничего нового, но вставлена в стандарт для общности и рекомендуется к применению только, когда другие варианты авторизации не доступны.
Пример
> POST /oauth/token HTTP/1.1 > Host: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=password&client_id=31337&client_secret=deadbeef&username=api@corp.mail.ru& password=qwerty < HTTP/1.1 200 OK < Content-Type: application/json
Восстановление предыдущей авторизации
Обычно, access token имеет ограниченный срок годности. Это может быть полезно, например, если он передается по открытым каналам. Чтобы не заставлять пользователя проходить авторизацию после истечения срока действия access token‘а, во всех перечисленных выше вариантах, в дополнение к access token‘у может возвращаться еще refresh token. По нему можно получить access token с помощью HTTP-запроса, аналогично авторизации по логину и паролю.
Пример
> POST /oauth/token HTTP/1.1 > Host: connect.mail.ru > Content-Type: application/x-www-form-urlencoded > > grant_type=refresh_token&client_id=31337&client_secret=deadbeef&refresh_token=8xLOxBtZp8 < HTTP/1.1 200 OK < Content-Type: application/json
Минусы OAuth 2.0
Во всей этой красоте есть и ложка дегтя, куда без нее?
OAuth 2.0 — развивающийся стандарт. Это значит, что спецификация еще не устоялась и постоянно меняется, иногда довольно заметно. Так, что если вы решили поддержать стандарт прямо сейчас, приготовьтесь к тому, что его поддержку придется подпиливать по мере изменения спецификации. С другой стороны, это также значит, что вы можете поучаствовать в процессе написания стандарта и внести в него свои идеи.
Безопасность OAuth 2.0 во многом основана на SSL. Это сильно упрощает жизнь разработчикам, но требует дополнительных вычислительных ресурсов и администрирования. Это может быть существенным вопросом в высоко нагруженных проектах.
Заключение
OAuth — простой стандарт авторизации, основанный на базовых принципах интернета, что делает возможным применение авторизации практически на любой платформе. Стандарт имеет поддержку крупнейших площадок и очевидно, что его популярность будет только расти. Если вы задумались об API для вашего сервиса, то авторизация с использованием OAuth 2.0 — хороший выбор.
Со своей стороны, мы внедрили OAuth 2.0 в API Mail.Ru и, теперь, вы можете использовать возможности протокола для реализации любых клиентов и сервисов, интегрированных с Mail.Ru.
Ссылки
- Текущая версия драфта стандарта OAuth 2.0
- Официальный сайт OAuth
- Рабочая группа по выработке стандарта (архивы)
- Документация по реализации OAuth 2.0 в Mail.Ru
Код авторизации кредитной карты: значение и назначение
Если вы подпишитесь на услугу по ссылке на этой странице, Reeves and Sons Limited может получить комиссию. Смотрите наши заявление об этике.

Код, который генерируется из пяти или шести номеров банком-эмитентом, код, используемый для проверки кредитной карты и одобрения ее при покупке или продаже. Коды авторизации кредитной карты являются уникальными для каждой отдельной транзакции, и они используются для обеспечения безопасной транзакции и во избежание возникновения мошенничества. При оплате кредитной картой продавец сначала авторизует карту до совершения транзакции. Этот процесс мгновен и выяснит, есть ли в банке достаточные средства, а также если карта была украдена или отменена. Код авторизации был разработан как способ избежать генерации квитанций и чрезмерной документации, сохраняя при этом контрольный журнал. После того, как код будет выпущен и авторизирована карта, средства для транзакции будут сняты. Эти коды авторизации представляют собой сокращенный метод, разработанный обработчиками платежей, чтобы свести к минимуму количество этапов проверки в процессе транзакции по кредитной карте. Они стали необходимыми, поскольку количество транзакций по кредитным картам увеличилось, причем более тяжелые объемы были вызваны увеличением приема кредитных карт торговцами и использованием их потребителями. Особенно в случае электронной торговли предприятиям необходимо быстро разрешить покупки, и просто не представляется возможным использовать более громоздкий метод проверки наличия средств на счете клиента. Поскольку платежные системы становятся все более сложными, они также становятся все более эффективными в плане проверки и авторизации транзакций на основе каждой покупки. Это позволило продавцам стать более гибкими и быстрыми в своей способности продавать свои товары и услуги, не беспокоясь о платежных ошибках. Код авторизации кредитной карты является ключом к этой скорости и гибкости.
Ревекка Картер
Ребекка Картер — опытный создатель контента, репортер новостей и блоггер, специализирующийся на маркетинге, развитии бизнеса и технологиях. Ее опыт охватывает все, от искусственного интеллекта до программного обеспечения для электронного маркетинга и устройств расширенной реальности. Когда она не пишет, Ребекка большую часть времени проводит за чтением, изучением природы и играми.
Комментарии Ответы 3
Роберт Джинкенс говорит:
Не отвечает на мою озабоченность. Мне нужен способ предотвратить списание средств с моей кредитной карты без авторизации.
Богдан Рэнца говорит:
Привет Роберт, Ваш банк должен обеспечить дополнительный уровень безопасности для онлайн-транзакций по кредитным и дебетовым картам, чтобы этого не произошло.
блебель говорит:
Можно ли использовать номер авторизации заказа для нескольких расчетов? например, если производится частичная отгрузка и счет-фактура оплачивается с использованием исходного номера авторизации, должен ли быть новый номер авторизации для заказа и его последующей отгрузки и счета-фактуры? Или можно использовать исходный номер авторизации для дальнейших транзакций по исходному заказу?
Что такое AuthInfo-код?
Секретный ключ переноса, по которому домен снимается с обслуживания у прежнего регистратора и принимается у нового регистратора.
Другие вопросы в разделе «Перенос доменов»
- Как перенести домен на «Джино»?
- Как перенести сайт с одного аккаунта на другой внутри «Джино»?
- Как изменить адреса DNS-серверов и контактную информацию для доменов, зарегистрированных через «Джино»?
- Я привязал домен к своему аккаунту и изменил NS-адреса на ваши, но домен не работает. Почему?
- Будет ли работать мой сайт при переносе домена?
- Какие у вас DNS?
- Как получить AuthInfo-код для переноса доменов в зонах .ru и .рф?
- Сколько времени действует AuthInfo-код?
- Нужно ли предварительно проходить процедуру верификации для получения AuthInfo-кода?
- По каким причинам регистратор может отказать в выдаче AuthInfo-кода?
- Общие вопросы о «Джино»
- Основные вопросы о «Джино»
- Оплата услуг
- Основные вопросы по хостингу
- Управление сайтом
- Работа с файлами
- FTP-доступ
- Задания по расписанию (cron)
- Доступ по SSH
- PHP
- CGI
- MySQL
- Общие вопросы по MySQL
- phpMyAdmin
- Joomla!
- osCommerce
- Invision Power Board
- MODX
- WordPress
- Основные вопросы по доменам
- Регистрация доменов
- Перенос доменов
- Домены .рф
- Основные вопросы
- Редактирование сайта
- Основные вопросы
- Настройка почтовых клиентов
- Почтовый интерфейс (WebMail)
Наши сервисы
Оплата
Wi-Fi розетка
до 31 октября!Authcode что это






Copyright © 2002-2023 Dynadot LLC. All rights reserved.
Найди свой домен
Регистрация нового домена
Инструменты домена
Послепродажный рынок
Управляйте своим портфелем
Центр помощиВыбрать аватар

Загрузить изображение
Dynadot HelpНужна поддержка для ваших доменов, сайтов или одного из инструментов на Dynadot? Используйте наш каталог статей помощи, чтобы найти нужные ресурсы, или свяжитесь с нашей службой поддержки, чтобы получить дополнительную помощь.
Популярные поисковые запросы
Успешно сохранено! Вы можете найти все сохраненные статьи в разделе Dynadot Help >Сохраненные статьи
Что такое код авторизации?
Обновлен: 2005/11/21 Просмотрено раз: 640Аутентификационный код (сокращенно — код авторизации) — это уникальная строка случайных букв и цифр, назначаемая домену. Когда выпередать домендля переноса к другому регистратору требуется его код аутентификации. Это помогает предотвратитьперехватчики доменовот передачи домена без разрешения владельца. Коды авторизации должны быть получены у текущего регистратора доменов, где зарегистрирован домен. Следуйте этим инструкциям, чтобынайдите свой код аутентификациив вашей учетной записи Dynadot.
Коды авторизации также иногда называют кодами EPP или кодами authinfo (информации авторизации).