Эта статья является кандидатом в добротные статьи

OpenID

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

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

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

Стандарт описывает процесс коммуникации Интернет-ресурсов (Relying Parties), требующих аутентификации, и провайдеров OpenID (OpenID Providers). Существует несколько OpenID провайдеров, которые предоставляют хостинг OpenID URL[2]. Аутентификацию OpenID используют в том числе Google, Yahoo!, AOL, LiveJournal, MySpace, IBM[3], Steam[4], Orange и VeriSign[5]. Расширение стандарта (the OpenID Attribute Exchange) облегчает передачу пользовательских данных, таких как имя или пол, от OpenID провайдера до Интернет-ресурса[6].

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

Текущая версия стандарта, OpenID Connect 1.0, вышла в феврале 2014 года[8] и была обновлена в ноябре 2014 года[9].

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

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

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

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

Общее описание протокола[править | править вики-текст]

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

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

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

Децентрализованность[править | править вики-текст]

Система OpenID — децентрализованная система. Это значит, что нет какой-либо центральной службы или организации, которая разрешала бы использование системы или регистрировала бы запрашивающие аутентификацию OpenID Интернет-ресурсы или провайдеров OpenID. Конечный пользователь может свободно выбирать, какого провайдера OpenID использовать, и сохранять Идентификатор в случае изменения провайдера OpenID.

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

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

Устройство протокола[править | править вики-текст]

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

  • Идентификатор (Identifier) — HTTP или HTTPS URI (URL) или XRI (начиная с OpenID 2.0)[12]. В протоколе используется несколько видов Идентификаторов.
  • Интернет-сервис (Relying Party) — веб-приложение, которое хочет проверить подлинность Идентификатора пользователя.
  • Провайдер OpenID (OpenID Provider) — сервер OpenID-аутентификации, который подтверждает Интернет-сервису подлинность Идентификатора конечного пользователя.
  • URL конечной точки провайдера (OpenID Provider Endpoint URL) — URL, который принимает запросы аутентификации по протоколу OpenID и может быть получен из Предъявляемого Идентификатора.
  • Идентификатор провайдера (OP Identifier) — идентификатор, по которому можно определить OpenID провайдера.
  • Предъявляемый Идентификатор (User-Supplied Identifier) — идентификатор, предъявляемый конечным пользователем Интернет-сервису. Предъявляемый Идентификатор может совпадать с OP Идентификатором.
  • Заявленный Идентификатор (Claimed Identifier) — идентификатор, о владении которым заявляет пользователь. Проверка данного утверждения является главной целью протокола OpenID. Заявленный Идентификатор может быть получен из Предъявленного путем его нормализации.

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

  1. Конечный пользователь иниациирует процесс аутентификации на Интернет-сервисе. [12] Для этого он вводит Предъявляемый Идентификатор в форму входа, представленную на сайте.
  2. Из Предъявляемого Идентификатора Интернет-сервис определяет URL конечной точки OpenID провайдера, используемого конечным пользователем. Предъявляемый Идентификатор может содержать только Идентификатор провайдера. В этом случае конечный пользователь указывает свой Заявленный Идентификатор, взаимодействуя с провайдером.
  3. (Не обязательно) Интернет-сервис и OpenID провайдер создают общий секретный ключ для кода аутентификации сообщения по протоколу Диффи-Хеллмана. С помощью кода аутентификации сообщения Интернет-сервис аутентифицирует сообщение от провайдера без дополнительных запросов к нему для проверки подлинности.
  4. В режиме checkid_setup Интернет-сервис перенаправляет браузер пользователя на сайт провайдера для дальнейшей аутентификации. В режиме checkid_immediate коммуникация браузера с провайдером происходит незаметно для пользователя.
  5. Провайдер проверяет, авторизирован ли пользователь на сервере и хочет ли он аутентифицироваться на Интернет-сервисе. Спецификация OpenID не описывает процесс аутентификации пользователя на стороне провайдера.
  6. Провайдер перенаправляет браузер пользователя назад в Интернет-сервис, передавая сервису результат аутентификации.
  7. Интернет-сервис проверяет подлинность информации, полученной от провайдера, включая возвращённый URL, информацию о пользователе, одноразовую метку (nonce) и подпись сообщения. Если на шаге 3 был создан общий секретный ключ, то проверка происходит с помощью него. Если ключ создан не был, то Интернет-сервис отправляет провайдеру дополнительный запрос (check_authentication) для проверки подлинности. В первом случае Интернет сервис называется зависимой стороной без памяти (stateless), а во втором - немой (dumb).
  8. В случае успешной проверки Интернет-сервис аутентифицирует пользователя.

OpenID Foundation[править | править вики-текст]

OpenID Foundation (OIDF) — это некоммерческая организация, которая была сформирована в июне 2007 года, чтобы управлять авторскими правами, товарными знаками, маркетинговыми компаниями и другой деятельностью, связанной с OpenID сообществом[13].

Совет директоров организации составляют 4 члена сообщества и 8 корпоративных членов[14]:

Члены сообщества

• Джон Бредли (Independent) (англ. John Bradley)

• Джордж Флетчер (AOL) (англ. George Fletcher)

• Майк Джонс (Microsoft) (англ. Mike Jones)

• Нат Сакимура (Nomura Research Institute) (англ. Nat Sakimura)

Корпоративные члены

Google — Адам Доус (англ. Adam Dawes)

Microsoft — Энтони Надалин (англ. Anthony Nadalin)

Ping Identity — Памела Дингл (англ. Pamela Dingle)

Symantec — Брайан Берлинер (англ. Brian Berliner)

Verizon — Бьорн Хельм (англ. Bjorn Hjelm)

Oracle — Пратик Мишра (англ. Prateek Mishra)

VMware— Ашиш Джейн (англ. Ashish Jain)

• Департамент здравоохранения и социальных служб США — Дэбби Бучи (англ. Debbie Bucci)

В США в марте 2008 года OpenID Foundation зарегистрировала товарный знак OpenID. Ранее он принадлежал компании NetMesh Inc. В Европе 31 августа 2007 года товарный знак OpenID был зарегистрирован OpenID Europe Foundation.

История возникновения[править | править вики-текст]

В 2005 году Брэд Фицпатрик, известный как создатель LiveJournal, работавший на то время в Six Apart предложил интернет-сообществу концепцию единой учётной записи для разных интернет-ресурсов[15]. Он предложил хранить свою учётную запись на одном сервере, а при регистрации на других интернет-ресурсах пользоваться этой учётной записью. Первоначально протокол называют Yadis (акроним от «Yet another distributed identity system»), название OpenID протокол получил уже после того, как Six Apart зарегестрировало доменное имя openid.net для своего проекта. Вскоре поддержка OpenID была реализована на LiveJournal, и эта технология быстро привлекла к себе внимание Интернет-сообщества.[16]

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

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

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

История версий[править | править вики-текст]

OpenID 1.1[править | править вики-текст]

OpenID аутентификация предоставляет способ доказать конечному пользователю свою личность на сайте без ввода его пароля, e-mail или другой информации, которую он не желает вводить на данном ресурсе. Спецификация OpenID 1.1 не предусматривает какого-либо механизма для обмена информации о профиле конечного пользователя. [19]

OpenID 2.0[править | править вики-текст]

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

OpenID 2.0 совместим с OpenID 1.1[12].

OpenID Connect[править | править вики-текст]

Третье поколение OpenID-технологии, которое представляет из себя аутентификационную надстройку над протоколом авторизации OAuth 2.0. OpenID Connect позволяет Интернет-ресурсам проверить личность пользователя на основе аутентификации, выполненной авторизационным сервером. Для работы используется RESTful API, описанное в спецификации[21]. Также в OpenID Connect определены дополнительные механизмы для надёжного шифрования и цифровой подписи. Стандарт позволяет использовать дополнительные возможности, такие как управление сессиями и обнаружение OpenID-провайдеров.

В то время как для интеграции стандарта OAuth 1.0a с OpenID 2.0 требуется расширение, в OpenID Connect, возможности OAuth 2.0 уже интегрированы с самим протоколом.[22]

Уязвимости[править | править вики-текст]

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

Некоторые исследователи считают[23], что протокол OpenID уязвим к фишинговым атакам, когда вместо провайдера злоумышленники направляют конечного пользователя на сайт с похожим дизайном. Если пользователь не замечает подмены, то он вводит свои аутентификационные данные (логин, пароль). В результате злоумышленники могут представляться Интернет-ресурсам данным пользователем и получить доступ к его информации, хранящейся на этих ресурсах.

Также возможны фишинговые атаки, когда подделывается сайт, поддерживающий OpenID-авторизацию с целью получения от провайдера информации о пользователе. Используя уязвимость "Скрытая переадресация" злоумышленники могут создать для пользователя иллюзию, что информация запрашивается настоящим сайтом[24].

OpenID не содержит механизмов предотвращения фишинговых атак. Ответственность за фишинговые атаки перекладывается на провайдеров OpenID[12].

Для защиты от фишинга пользователи могут использовать дополнительное программное обеспечение, например Microsoft’s Identity Selector[25]. Также существуют решения, не требующие установки дополнительного программного обеспечения, например BeamAuth, использующий для своей работы закладки в браузере[26].

Атака «Человек посередине» при незащищённом соединении[править | править вики-текст]

Если для защиты соединения между пользователем и OpenID провайдером не используются протоколы TLS/SSL, то на последней стадии аутентификации возникает уязвимость. Для перенаправления пользователя от себя к Интернет-сервису провайдер передает пользователю специальный URL. Проблема заключается в том, что любой, кто может получить этот URL (например, путем сниффинга витой пары), может воспроизвести его и получить доступ на сайт как пользователь.

Некоторые провайдеры для защиты от этой атаки используют одноразовый код (Nonce), который позволяет воспользоваться данным URL только один раз. Нонс-решение работает только в случае, когда Пользователь первым использует URL. Однако злоумышленник, который прослушивает канал связи и находится между пользователем и провайдером, может получить URL и немедленно прервать TCP-соединение пользователя, а затем выполнить атаку. Таким образом, одноразовые коды защищают только от пассивных злоумышленников, но не могут предотвратить атак активного злоумышленника. Использование TLS / SSL в процессе аутентификации устраняет этот риск.[27]

Переиспользование идентификатора[править | править вики-текст]

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

В спецификации OpenID 2.0 для решения проблемы переиспользования идентификатора рекомендуется использовать фрагменты - к идентификатору должен добавляться фрагмент, уникальный для каждого пользователя[29].

Ошибки аутентификации[править | править вики-текст]

В 2012 году исследователи опубликовали работу, описывающую две уязвимости в OpenID. Обе уязвимости позволяют злоумышленнику получить доступ к аккаунту жертвы[30].

Первая уязвимость использует OpenID Attribute Exchange. Проблема заключается в том, что некоторые Интернет-сервисы не проверяют данные, переданные через Attribute Exchange. Если Attribute Exchange используется для передачи нечувствительной к подмене информации о пользователе (например, пол), то данной уязвимостью воспользоваться не удастся. Однако Attribute Exchange может также использоваться для передачи, например, email пользователя. Злоумышленник осуществляет попытку аутентификации на сайте зависимой стороны и добавляет в ответ провайдера email жертвы. Если зависимая сторона не проверяет подлинность этой информации, то злоумышленник будет идентифицирован как жертва. Так можно получить доступ к любому зарегистрированному аккаунту. Согласно отчету исследователей, этой атаке были подвержены многие популярные сайты, включая Yahoo! Mail.

Вторая уязвимость связана с ошибкой на стороне провайдера и тоже позволяет получить доступ к аккаунту на сайте зависимой стороны. Ответ провайдера содержит поле openid.ext1.value.email, которое обрабатывается зависимой стороной как email пользователя. Однако тип данных, который добавляется провайдером в данное поле может контролироваться злоумышленником - запрос к провайдеру содержит поле type.email с ссылкой на схему, описывающую данное поле. Атакующий может добавить в type.email ссылку на схему, описывающую имя пользователя. Если злоумышленник может зарегистрироваться на сайте провайдера с именем, например, alice@example.com, то провайдер добавит это имя в поле openid.ext1.value.email и зависимая сторона будет считать, что аккаунт с данным email принадлежит злоумышленнику. Уязвимыми были признаны реализации Google и Paypal.

OpenID опубликовала отчеты по обеим уязвимостям[31][32], и были выпущены обновления, исправляющие их.

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. OpenID Authentication 2.0. Проверено 2016-19-12.
  2. Get an OpenID. Проверено 12 декабря 2016. Архивировано 26 февраля 2017 года.
  3. Technology Leaders Join OpenID Foundation.
  4. Steam Web API.
  5. get-an-openid.
  6. Final: OpenID Attribute Exchange 1.0 - Final (англ.). openid.net. Проверено 8 октября 2017.
  7. OpenID 2009 Year in Review. Проверено 2016-19-12.
  8. Final: OpenID Connect Core 1.0 (англ.). openid.net. Проверено 8 октября 2017.
  9. Errata to OpenID Connect Specifications Approved | OpenID (en-US). openid.net. Проверено 8 октября 2017.
  10. What is OpenID? | OpenID (en-US). openid.net. Проверено 7 ноября 2017.
  11. OpenID Authentication 1.1 (англ.). openid.net. Проверено 9 октября 2017.
  12. 1 2 3 4 5 OpenID Authentication 2.0.
  13. OpenID Foundation | OpenID (en-US). openid.net. Проверено 8 ноября 2017.
  14. Leadership | OpenID (en-US). openid.net. Проверено 20 октября 2017.
  15. Distributed Identity: Yadis. Проверено 12 декабря 2016.
  16. OpenID: an actually distributed identity system. Проверено 12 декабря 2016. Архивировано 24 сентября 2005 года.
  17. Sun OpenID: Non-Assertion Covenant.
  18. Trademark Assignment Abstract of Title.
  19. OpenID Authentication 1.1. Проверено 12 декабря 2016.
  20. Final: OpenID Authentication 2.0 - Final (англ.). openid.net. Проверено 8 октября 2017.
  21. Final: OpenID Connect Core 1.0 incorporating errata set 1 (англ.). openid.net. Проверено 8 октября 2017.
  22. Welcome to OpenID Connect. Проверено 12 декабря 2016.
  23. Policies and research in identity management : second IFIP WG 11.6 Working Conference, IDMAN 2010, Oslo, Norway, November 18-19, 2010, proceedings. — Berlin: Springer, 2010. — С. 73-84. — 1 online resource (144 pages) с. — ISBN 9783642173035.
  24. Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID – Tetraph Blog (англ.). www.tetraph.com. Проверено 9 октября 2017.
  25. Policies and research in identity management : second IFIP WG 11.6 Working Conference, IDMAN 2010, Oslo, Norway, November 18-19, 2010, proceedings. — Berlin: Springer, 2010. — С. 73-84. — 1 online resource (144 pages) с. — ISBN 9783642173035.
  26. Ben Adida Beamauth: Two-factor Web Authentication with a Bookmark // Proceedings of the 14th ACM Conference on Computer and Communications Security. — New York, NY, USA: ACM, 2007. — С. 48–57. — ISBN 9781595937032. — DOI:10.1145/1315245.1315253.
  27. Tsyrklevich, Eugene. Single Sign-On for the Internet: A Security Story. Проверено 12 декабря 2016.
  28. Policies and Research in Identity Management | SpringerLink.
  29. Final: OpenID Authentication 2.0 - Final (англ.). openid.net. Проверено 9 октября 2017.
  30. Rui Wang, Shuo Chen, XiaoFeng Wang Signing Me onto Your Accounts through Facebook and Google: a Traffic-Guided Security Study of Commercially Deployed Single-Sign-On Web Services // Microsoft Research. — 2012-05-01.
  31. Attribute Exchange Security Alert | OpenID (en-US). openid.net. Проверено 11 октября 2017.
  32. Vulnerability report: Data confusion | OpenID (en-US). openid.net. Проверено 11 октября 2017.
  33. Announcing Facebook Connect - Facebook for Developers (en-US). Facebook Developers. Проверено 9 ноября 2015.

Литература[править | править вики-текст]

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

Ссылки[править | править вики-текст]