OpenID

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Логотип

OpenID — открытый стандарт децентрализованной системы аутентификации, предоставляющей пользователю возможность создать единую учётную запись для аутентификации на множестве не связанных друг с другом интернет-ресурсов, используя услуги третьих лиц[1].

Базовой функцией OpenID является предоставление портативного, клиент-ориентированного, цифрового идентификатора для свободного и децентрализованного использования.

Стандарт описывает процесс коммуникации Интернет-ресурсов (Relying Parties), требующих аутентификации, и Провайдеров OpenID (OpenID Providers).

Аутентификацию OpenID используют в том числе Google, Yahoo!, AOL, LiveJournal, MySpace, IBM[2], Steam[3], Orange и VeriSign[4].

Сайты, поддерживающие её, часто помечаются логотипом системы, расположенным возле поля ввода пароля на странице входа[источник не указан 119 дней].

Существует несколько OpenID-провайдеров, которые предоставляют хостинг OpenID URL[источник не указан 119 дней].

Вход через OpenID с точки зрения конечного пользователя[править | править исходный текст]

На сайте, назовём его, к примеру, example.com, располагается форма входа, но вместо привычных полей логин и пароль, в ней можно заполнить только одно — поле для ввода OpenID идентификатора. Зачастую рядом с таким полем располагается логотип OpenID.

Чтобы пользователь Вася Пупкин смог пройти OpenID-авторизацию на сайте example.com с помощью своего идентификатора pupkin.openid-provider.org, который он зарегистрировал у провайдера идентификации openid-provider.org, Вася просто на example.com вводит свой OpenID в предлагаемую форму входа.

Сайт зависимой стороны перенаправляет пользователя на сайт провайдера. Сайт провайдера запрашивает у пользователя подтверждение, действительно ли пользователь желает предоставить информацию о своей учётной записи. Если пользователь соглашается, то сайт провайдера перенаправляет пользователя обратно на сайт зависимой стороны. При обратном перенаправлении, провайдер передаст информацию о пользователе зависимой стороне.

Например, OpenID-провайдером является Живой Журнал, поэтому в качестве Open ID можно использовать адрес своего дневника в ЖЖ[5].

Вход через OpenID с точки зрения аутентифицирующей стороны[править | править исходный текст]

Для веб-разработчиков: за обработку формы отвечает клиентская часть библиотеки OpenID[6]. Декларируя возможность авторизации по OpenID, сайт example.com объявляет себя Зависимой стороной в ли секретный код — описатель партнёра (associate handler), который зависимая сторона сохраняет. В режиме checkid_setup зависимая сторона переадресует браузер пользователя к провайдеру. В данном случае браузер Васи переадресуется на openid-provider.org, где провайдер сможет опознать Васю.

Метод идентификации пользователя провайдером может быть любым, но обычно OpenID провайдер запрашивает у пользователя логин и пароль его учётной записи на сервере провайдера (затем, как правило, сохраняет сессию в cookie, как это делает большинство сайтов с парольным доступом). Затем провайдер спросит, доверяет ли Вася странице, указанной зависимой стороной для возврата пользователя после проверки подлинности, куда будет отправлена его информация (к примеру, http://example.com/openid-return.php). Если Вася ответит утвердительно, браузер с соответствующими подтверждениями перенаправляется на указанную страницу, и идентификация по OpenID почти готова к тому, чтобы быть признанной успешной. В случае недоверия Васи к указанной странице, браузер всё равно перенаправляется туда же — однако зависимая сторона получает отказ на свой запрос, и, в свою очередь, отказывается впустить Васю.

Однако процесс входа всё ещё не завершён, потому что на данном этапе example.com должен удостовериться, что полномочия пользователю выдал действительно openid-provider.org, а не сам Вася например, взломщик, и пошёл на страницу подтверждения авторизации самостоятельно. Если стороны предварительно договорились о секретном ключе (shared secret см.выше), то зависимая сторона может проверить ключ, полученный вместе с полномочиями пользователя по имеющейся у неё информации. Такая зависимая сторона называется хранящей состояние (stateful), так как она сохраняет секретный ключ между сессиями. В противоположность ей зависимая сторона без памяти (stateless) или немая (dumb) должна совершить ещё один фоновый запрос (check_authentication) для проверки того, что данные действительно пришли с сервера openid-provider.org.

После проверки идентификатора Вася признаётся зашедшим на example.com как pupkin.openid-provider.org. После чего сайт может сохранить сессию или, если это первый визит, запросить у пользователя дополнительную информацию необходимую example.com для завершения регистрации.

OpenID не предоставляет собственных средств проверки подлинности пользователя, но если провайдер идентификации использует сильное шифрование, OpenID может использоваться для защищённых транзакций банков и коммерческих интернет-сервисов[7].

Общее описание протокола[править | править исходный текст]

Возможности OpenID[править | править исходный текст]

Обмен информацией профиля или другими сведениями, не описанными в спецификации OpenID, может быть реализован поверх протокола OpenID, с помощью дополнительных видов обслуживания. Для этого предусмотрен официально поддерживаемый протоколом OpenID механизм расширения протокола. Пользователь может создать учётную запись на сервере OpenID Провайдера, а затем использовать её как основу для аутентификации на любом сайте, поддерживающем протокол OpenID.

Децентрализованность[править | править исходный текст]

Система OpenID – децентрализованная система. Это значит, что, нет какой-либо центральной службы или организации, которая разрешала бы использование системы или регистрировала бы запрашивающие аутентификацию OpenID Интернет-ресурсы(Relying Parties) или Провайдеров OpenID(OpenID Providers). А конечный пользователь может свободно выбирать, какого Провайдера OpenID использовать, и сохранять Идентификатор в случае изменения Провайдера OpenID.

Технологические требования[править | править исходный текст]

Стандарт не требует JavaScript или современных браузеров, однако схема аутентификации хорошо совместима с концепцией "AJAX". Это значит, что конечный пользователь аутентифицируется Интернет-сервисом(- любым объектом, желающим проверить подлинность идентификатора), не покидая текущую Web–страницу. OpenID аутентификация использует только стандартные HTTP(S) запросы и ответы, поэтому он не требует специальных пользовательских приложений или какого-либо клиентского программного обеспечения. OpenID не привязан к использованию файлов cookie или к каким-либо другим механизмам управления сеансом. Различные расширения могут упростить использование OpenID, но не являются обязательными для использования стандарта[1].

Устройство протокола[править | править исходный текст]

Терминология[править | править исходный текст]

  • Идентификатор(Identifier, далее ID) - "http" или "https" URI(URL) или XRI[1].
  • Провайдер OpenID(OpenID Provider, далее OP или провайдер) – сервер OpenID аутентификации, который подтверждает Интернет-сервису(- любому объекту, желающему проверить подлинность идентификатора) подлинность Идентификатора конечного пользователя.
  • URL конечной точки OP(OP Endpoint URL, далее OP URL) – URL, который принимает запросы аутентификации по протоколу OpenID и содержится в Предъявляемом Идентификаторе (HTTP или HTTPS).
  • OP Идентификатор(OP Identifier, далее OP ID) – идентификатор, предъявляемый конечным пользователем провайдеру OpenID для аутентификации на сервере провайдера OpenID.
  • Предъявляемый Идентификатор(User-Supplied Identifier, далее Предъявляемый ID) – идентификатор, который конечный пользователь предоставляет Сервису, это может быть OP URL. В случае использования OP URL Провайдер предоставляет возможность конечному пользователю передать Единый Идентификатор Интернет-сервису.
  • Единый Идентификатор(Claimed Identifier, далее Единый ID) – идентификатор единой учётной записи пользователя, хранящийся на сервере. Может быть использован в качестве идентификатора учётной записи в Интернет-сервисе. Предоставление этого идентификатора и есть основная цель протокола. Единый идентификатор может находиться в Предъявляемом Идентификаторе, либо может быть получен от OP.

Механизм работы[править | править исходный текст]

  1. Конечный пользователь желает аутентифицироваться с помощью Предъявляемого ID на Интернет-сервисе, через свой браузер[1].
  2. Из Предъявляемого Идентификатора Интернет-сервис определяет URL Провайдера OpenID, используемого конечным пользователем. Предъявляемый ID может содержать только OP URL, который позволяет конечному пользователю, каким-то образом взаимодействуя с OP, передать Единый ID, или любую другую информацию о себе, Интернет-сервису. Переданная информация ещё не проверена Интернет-сервисом.
  3. (Не обязательно) Интернет-сервис и OP вместе создают общий секретный ключ для {MAC_(криптография)|кода аутентификации сообщения]] по протоколу Диффи-Хеллмана. С помощью кода аутентификации сообщения Интернет-сервис аутентифицирует сообщение от OP без дополнительных запросов подлинности к провайдеру.
  4. Интернет-сервис перенаправляет браузер пользователя на OP с запросом аутентификации.
  5. Провайдер проверяет, авторизирован ли пользователь на сервере и хочет ли он аутентифицироваться на Интернет-сервисе. В общем случае, конечный пользователь предъявляет OP ID. Спецификация OpenID не описывает, каким образом конечный пользователь аутентифицируется у OP.
  6. OP перенаправляет браузер пользователя назад в Интернет-сервис с утверждением, что пользователь аутентифицирован или не аутентифицирован, и с результатом аутентификации – одноразовой меткой. Каждая аутентификация на сервере генерирует новую метку, которая не повторяется со сгенерированными ранее одноразовыми метками для того же пользователя. Одноразовая метка позволяет предотвратить атаки повторного воспроизведения.
  7. Интернет-сервис проверяет информацию, полученную от провайдера, включая возвращённый URL, информацию о пользователе, результат аутентификации на сервере - одноразовую метку, код аутентификации сообщения, с помощью секретного общего ключа, если он создавался на шаге 3, или, посылая прямой запрос OP.
  8. В случае успешной проверки Интернет-сервис аутентифицирует пользователя.

Уточним для третьего пункта, что OpenID аутентификация поддерживает два алгоритма подписи:

В спецификации рекомендуется использовать HMAC-SHA256.

История возникновения[править | править исходный текст]

С каждым днём всё больше и больше людей становятся пользователями интернета. Да и интернет развивается стремительными шагами. Появляются новые удобные интернет-ресурсы, на многих из которых пользователю необходимо регистрироваться. Это значит, что для каждого ресурса нужно заводить учётную запись, логин и пароль. Когда личных кабинетов становится больше определённого количества, становится трудно помнить все логины и пароли, особенно если посещаешь ресурс не регулярно или раз в месяц. 5 мая, 2005 года хорошо известный как создатель LiveJournal Брэд Фицпатрик предложил интернет сообществу концепцую, которая позволяла бы использовать единую учётную запись на разных не связанных друг с другом интернет-ресурсах. Он предложил хранить свои учётную запись на одном сервере, а, при регистрации на каких-либо интернет-ресурсах, пользоваться этой единственнной учётной записью[8].

В 2006 была создана первая спецификация OpenID Authentication 1.1

5 декабря 2007 года Sun Microsystems, VeriSign и ряд компаний поменьше, участвующих в разработке OpenID выпустили спецификацию OpenID 2.0 и официально заявили, что не будут выдвигать претензии в случае использования технологии OpenID кем-либо, если только действия лица, использующего технологию, не будут направлены против реализации технологии или на правообладание технологией[9].

Товарный знак OpenID был зарегистрирован в США в марте 2008 года[10].

Отличия OpenID 1.1 от OpenID 2.0[править | править исходный текст]

Основным отличием OpenID 1.1 от OpenID 2.0 для конечного пользователя является возможность использования XRI в качестве Идентификатора. OpenID 2.0, в отличие от OpenID 1.1, поддерживает алгоритм HMAC-SHA256 - 256 bit key length ([RFC2104] цифровой подписи, что делает аутентификацию OpenID сообщений безопаснее. OpenID 2.0 совместим с OpenID 1.1[1].

Уязвимости[править | править исходный текст]

Фишинговые атаки[править | править исходный текст]

Некоторые интернет пользователи считают, что протокол OpenID уязвим к фишинговым атакам, когда вместо OP, злоумышленники направляют конечного пользователя на сайт с похожим дизайном. Конечный пользователь вводит свой OP ID, и злоумышленникам в руки попадает информация, с помощью которой, они могут представляться Интернет-ресурсам конечным пользователем[11]. OpenID не содержит механизмов предотвращения фишинговых атак. Ответственность за фишинговые атаки перекладывается на провайдеров OpenID[1].

Захват подтверждения аутентификации[править | править исходный текст]

Если в процессе аутентификации конечного пользователя не используется SSL шифрование, злоумышленник может перехватить URL, и предъявить его Интернет-ресурсу вместо конечного пользователя и получить доступ к ресурсу от его имени [12].

Партнёры и спонсоры[править | править исходный текст]

Google, Microsoft, Yahoo!, Symantec, Verizon, PayPal, Ping Identity[13].

Делегирование OpenID[править | править исходный текст]

Существует возможность делегирования OpenID. Это означает, что владелец некоего доменного имени может использовать его в качестве синонима (алиаса) к уже существующему OpenID, полученному у любого провайдера OpenID[источник не указан 119 дней].

Успешность[править | править исходный текст]

На декабрь 2009 года, существовало более 1 миллиарда аккаунтов OpenID и около 9 миллионов сайтов поддерживающих технологию OpenID[14].

Примечания[править | править исходный текст]

Аналоги[править | править исходный текст]

  • Mozilla Persona
  • TypeKey
  • uID — универсальный логин (e-mail адрес), используемый в uNet-сообществе и большинстве сайтов системы uCoz.
  • Google Friend Connect — платформа, позволяющая принимать авторизацию на сайте без регистрации. Авторизация по OpenID, Google, AIM и Yahoo

См. также[править | править исходный текст]

Литература[править | править исходный текст]

  1. Mark Ciampa Sequrity + Guide To Network Sequrity Fundamentals. — 2012. — С. 400.
  1. Refeeq ur Rehman, CISSP OpenID Book. — 2007.

Ссылки[править | править исходный текст]

  1. Brad Fitzpatrick , David Recordon , Dick Hardt, Josh Hoyt OpenID Authentication 2.0 - Final (англ.). — 2007.
  1. Paul Crowley Phishing attacks on OpenID (англ.). — 2005.
  1. Eugene Tsyrklivich, Vlad Tsyrklivich Single Sign-On For The Internet: A Sequrity Story (англ.) // BlackHat USA, Las Vegas 2007. — 2007.
  2. OpenID Foundation Sponsoring Members (англ.). — 2013.
  3. Brian Kissel OpenID 2009 Year in Review (англ.). — 2009.
  4. OpenID Foundation Sponsoring Members (англ.). — 2013.
  5. Technology Leaders Join OpenID Foundation (англ.). — 2008.
  6. Steam Web API (англ.).
  7. Brad Fitzpatrick Distributed Identity: Yadis (англ.). — 2005.
  8. United States Patent and Trademark Office Trademark Assignment Abstract of Title (англ.). — 2008.
  9. Brad Fitzpatrick Sun OpenID: Non-Assertion Covenant (англ.). — 2008.
  1. OpenID explained (англ.).