OpenID: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
Aynulin (обсуждение | вклад) источники |
Miikul (обсуждение | вклад) Нет описания правки |
||
(не показано 46 промежуточных версий 23 участников) | |||
Строка 1: | Строка 1: | ||
⚫ | |||
{{переработать||Эта статья}} |
|||
⚫ | |||
'''OpenID''' — [[открытый стандарт]] децентрализованной системы [[Аутентификация|аутентификации]], предоставляющей пользователю возможность создать единую [[Учётная запись|учётную запись]] для аутентификации на множестве не связанных друг с другом [[Сайт|интернет-ресурсов]], используя услуги третьих лиц{{sfn|OpenID Authentication 2.0 Specification|loc=Abstract}}. |
'''OpenID''' — [[открытый стандарт]] децентрализованной системы [[Аутентификация|аутентификации]], предоставляющей пользователю возможность создать единую [[Учётная запись|учётную запись]] для аутентификации на множестве не связанных друг с другом [[Сайт|интернет-ресурсов]], используя услуги третьих лиц{{sfn|OpenID Authentication 2.0 Specification|loc=Abstract}}. |
||
Базовой функцией OpenID является предоставление портативного, клиент-ориентированного, цифрового [[идентификатор]]а для свободного и децентрализованного использования. |
Базовой функцией OpenID является предоставление портативного, клиент-ориентированного, цифрового [[идентификатор]]а для свободного и децентрализованного использования{{sfn|OpenID Authentication 2.0 Specification}}. |
||
Стандарт описывает процесс коммуникации |
Стандарт описывает процесс коммуникации интернет-ресурсов (Relying Parties), требующих аутентификации, и провайдеров OpenID (OpenID Providers). Существует несколько OpenID-провайдеров, которые предоставляют хостинг OpenID [[URL]]{{sfn|Microsoft and Google ship OpenID}}. Аутентификацию OpenID используют в том числе [[Google (поисковая система)|Google]], [[Yahoo!]], [[AOL]], [[LiveJournal]], [[MySpace]], [[IBM]]{{sfn|Technology Leaders Join OpenID Foundation}}, [[Steam]]{{sfn|Документация Steam Web API}} и [[Orange]]. Расширение стандарта (the OpenID Attribute Exchange) облегчает передачу пользовательских данных, таких как имя или пол, от OpenID-провайдера до интернет-ресурса{{sfn|Final: OpenID Attribute Exchange 1.0 - Final}}. |
||
На декабрь 2009 года |
На декабрь 2009 года существовало более 1 миллиарда аккаунтов OpenID и около 9 миллионов сайтов, поддерживающих технологию OpenID{{sfn|OpenID 2009 Year in Review}}. |
||
Текущая версия стандарта, OpenID Connect 1.0, вышла в феврале 2014 года{{sfn|Final: OpenID Connect Core 1.0}} |
Текущая версия стандарта, OpenID Connect 1.0, вышла в феврале 2014 года и была обновлена в ноябре 2014 года{{sfn|Final: OpenID Connect Core 1.0}}{{sfn|Errata to OpenID Connect Specifications Approved}}. |
||
== История возникновения == |
== История возникновения == |
||
В 2005 году [[Брэд Фицпатрик]], известный как создатель [[LiveJournal]], работавший на то время в [[Six Apart]] предложил интернет-сообществу концепцию единой учётной записи для разных интернет-ресурсов{{sfn|Distributed Identity: Yadis}}. Он предложил хранить свою учётную запись на одном сервере, а при регистрации на других интернет-ресурсах пользоваться этой учётной записью. Первоначально протокол называют Yadis (акроним от «Yet another distributed identity system»), название OpenID протокол получил уже после того, как Six Apart зарегистрировало доменное имя openid.net для своего проекта. Вскоре поддержка OpenID была реализована на LiveJournal, и эта технология быстро привлекла к себе внимание |
В 2005 году [[Брэд Фицпатрик]], известный как создатель [[LiveJournal]], работавший на то время в [[Six Apart]], предложил интернет-сообществу концепцию единой учётной записи для разных интернет-ресурсов{{sfn|Distributed Identity: Yadis}}. Он предложил хранить свою учётную запись на одном сервере, а при регистрации на других интернет-ресурсах пользоваться этой учётной записью. Первоначально протокол называют Yadis (акроним от «Yet another distributed identity system»), название OpenID протокол получил уже после того, как Six Apart зарегистрировало доменное имя openid.net для своего проекта. Вскоре поддержка OpenID была реализована на LiveJournal, и эта технология быстро привлекла к себе внимание интернет-сообщества{{sfn|OpenID: an actually distributed identity system}}. |
||
В 2006 была создана первая спецификация OpenID |
В 2006 была создана первая спецификация OpenID — OpenID Authentication 1.1{{sfn|OpenID Authentication 1.1}}. |
||
5 декабря 2007 года [[Sun Microsystems]], [[VeriSign]] и ряд компаний, участвующих в разработке OpenID, выпустили спецификацию OpenID 2.0 и официально заявили, что не будут выдвигать претензии в случае использования технологии OpenID кем-либо, если только действия лица, использующего технологию, не будут направлены против реализации технологии или на правообладание технологией{{sfn|OpenID.sun.com is open for business}}. |
5 декабря 2007 года [[Sun Microsystems]], [[VeriSign]] и ряд компаний, участвующих в разработке OpenID, выпустили спецификацию OpenID 2.0 и официально заявили, что не будут выдвигать претензии в случае использования технологии OpenID кем-либо, если только действия лица, использующего технологию, не будут направлены против реализации технологии или на правообладание технологией{{sfn|OpenID.sun.com is open for business}}. |
||
Строка 21: | Строка 20: | ||
== Вход через OpenID с точки зрения конечного пользователя == |
== Вход через OpenID с точки зрения конечного пользователя == |
||
⚫ | На сайте, например, <code>example.com</code>, находится форма входа с единственным полем ввода для OpenID-идентификатора. Зачастую рядом с таким полем располагается логотип OpenID. Для того, чтобы авторизоваться на данном сайте с помощью своего идентификатора, например, <code>pupkin.openid-provider.org</code>, зарегистрированного у OpenID-провайдера <code>openid-provider.org</code>, пользователю необходимо ввести свой идентификатор в предлагаемую на сайте форму входа. После этого сайт <code>example.com</code> перенаправляет пользователя на сайт провайдера. Сайт провайдера запрашивает у пользователя подтверждение, действительно ли пользователь желает предоставить информацию о своей учётной записи. Если пользователь соглашается, то сайт провайдера перенаправляет пользователя обратно на сайт зависимой стороны. При обратном перенаправлении провайдер передаст информацию о пользователе зависимой стороне{{sfn|OpenID Authentication 2.0 Specification|loc= Protocol Overview}}. |
||
На сайте, например, <code>example.com</code> находится форма входа с единственным полем ввода для OpenID идентификатора. Зачастую рядом с таким полем располагается логотип OpenID. |
|||
⚫ | |||
⚫ | Для того, чтобы авторизоваться на данном сайте с помощью своего идентификатора, например, <code>pupkin.openid-provider.org</code>, зарегистрированного у OpenID |
||
⚫ | |||
== Общее описание протокола == |
== Общее описание протокола == |
||
=== Возможности OpenID === |
=== Возможности OpenID === |
||
OpenID позволяет пользователю использовать одну учетную запись, зарегистрированную у OpenID |
OpenID позволяет пользователю использовать одну учетную запись, зарегистрированную у OpenID-провайдера, на множестве других сайтов. Пользователь может выбрать, какую информацию предоставить сайту. Обмен информацией профиля или другими сведениями, не описанными в спецификации OpenID, может быть реализован поверх протокола OpenID с помощью дополнительных видов обслуживания. Для этого предусмотрен официально поддерживаемый протоколом OpenID механизм расширения протокола{{sfn|What is OpenID?}}. |
||
Существует возможность делегирования OpenID. Это означает, что владелец некоего доменного имени может использовать его в качестве синонима (алиаса) к уже существующему OpenID-идентификатору, полученному у любого провайдера OpenID. Для этого необходимо на страницу, используемую в качестве делегата добавить несколько [[Метатеги|мета-тегов]]{{sfn|OpenID Authentication 1.1|loc= Delegating Authentication}}. |
Существует возможность делегирования OpenID. Это означает, что владелец некоего доменного имени может использовать его в качестве синонима (алиаса) к уже существующему OpenID-идентификатору, полученному у любого провайдера OpenID. Для этого необходимо на страницу, используемую в качестве делегата, добавить несколько [[Метатеги|мета-тегов]]{{sfn|OpenID Authentication 1.1|loc= Delegating Authentication}}. |
||
=== Децентрализованность === |
=== Децентрализованность === |
||
Система OpenID — децентрализованная система. Это значит, что нет какой-либо центральной службы или организации, которая разрешала бы использование системы или регистрировала бы запрашивающие аутентификацию OpenID |
Система OpenID — децентрализованная система. Это значит, что нет какой-либо центральной службы или организации, которая разрешала бы использование системы или регистрировала бы запрашивающие аутентификацию OpenID интернет-ресурсы или провайдеров OpenID. [[Пользователь|Конечный пользователь]] может свободно выбирать, какого провайдера OpenID использовать, и сохранять Идентификатор в случае изменения провайдера OpenID{{sfn|OpenID Authentication 2.0 Specification|loc=Abstract}}. |
||
=== Технологические требования === |
=== Технологические требования === |
||
Стандарт не требует [[JavaScript]] или современных [[браузер]]ов, однако схема аутентификации хорошо совместима с подходом [[AJAX]]. Это значит, что конечный пользователь может проходить аутентификацию на сайте, не покидая текущую [[Веб-страница|страницу.]] В этом случае коммуникация |
Стандарт не требует [[JavaScript]] или современных [[браузер]]ов, однако схема аутентификации хорошо совместима с подходом [[AJAX]]. Это значит, что конечный пользователь может проходить аутентификацию на сайте, не покидая текущую [[Веб-страница|страницу.]] В этом случае коммуникация интернет-ресурса с OpenID-провайдером будет проходить в фоновом режиме. OpenID-аутентификация использует только стандартные [[HTTP]][[HTTPS|(S)]] запросы и ответы, поэтому стандарт не требует от пользователя установки дополнительного [[Программное обеспечение|программного обеспечения]]. Для работы OpenID не требуется использовать [[HTTP-Cookie|cookie]] или какие-либо другие механизмы управления сессией. Различные расширения могут упростить использование OpenID, но не являются обязательными для использования стандарта{{sfn|OpenID Authentication 2.0 Specification}}. |
||
OpenID-аутентификация использует только стандартные [[HTTP]][[HTTPS|(S)]] запросы и ответы, поэтому стандарт не требует от пользователя установки дополнительного [[Программное обеспечение|программного обеспечения]]. Для работы OpenID не требуется использовать [[HTTP-Cookie|cookie]] или какие-либо другие механизмы управления сессией. Различные расширения могут упростить использование OpenID, но не являются обязательными для использования стандарта{{sfn|OpenID Authentication 2.0 Specification}}. |
|||
== Устройство протокола == |
== Устройство протокола == |
||
=== Терминология === |
=== Терминология === |
||
* Идентификатор (Identifier) — [[HTTP]] или [[HTTPS]] [[URI]] (URL) или [[XRI]] (начиная с OpenID 2.0){{sfn|OpenID Authentication 2.0 Specification}}. В протоколе используется несколько видов |
* Идентификатор (Identifier) — [[HTTP]] или [[HTTPS]] [[URI]] (URL) или [[XRI]] (начиная с OpenID 2.0){{sfn|OpenID Authentication 2.0 Specification}}. В протоколе используется несколько видов идентификаторов. |
||
* Интернет-сервис (Relying Party) — веб-приложение, которое хочет проверить подлинность |
* Интернет-сервис (Relying Party) — веб-приложение, которое хочет проверить подлинность идентификатора пользователя. |
||
* Провайдер OpenID (OpenID Provider) — сервер OpenID-аутентификации, который подтверждает |
* Провайдер OpenID (OpenID Provider) — сервер OpenID-аутентификации, который подтверждает интернет-сервису подлинность идентификатора конечного пользователя. |
||
* URL конечной точки провайдера (OpenID Provider Endpoint URL) — URL, который принимает запросы аутентификации по протоколу OpenID и может быть получен из |
* URL конечной точки провайдера (OpenID Provider Endpoint URL) — URL, который принимает запросы аутентификации по протоколу OpenID и может быть получен из предъявляемого идентификатора. |
||
* Идентификатор провайдера (OP Identifier) — идентификатор, по которому можно определить OpenID |
* Идентификатор провайдера (OP Identifier) — идентификатор, по которому можно определить OpenID-провайдера. |
||
* Предъявляемый |
* Предъявляемый идентификатор (User-Supplied Identifier) — идентификатор, предъявляемый конечным пользователем интернет-сервису. Предъявляемый идентификатор может совпадать с OP-идентификатором. |
||
* Заявленный |
* Заявленный идентификатор (Claimed Identifier) — идентификатор, о владении которым заявляет пользователь. Проверка данного утверждения является главной целью протокола OpenID. Заявленный идентификатор может быть получен из предъявленного путём его нормализации{{sfn|OpenID Authentication 2.0 Specification|loc=Normalization}}. |
||
=== Механизм работы === |
=== Механизм работы === |
||
# Конечный пользователь инициирует процесс аутентификации на |
# Конечный пользователь инициирует процесс аутентификации на интернет-сервисе. Для этого он вводит предъявляемый идентификатор в форму входа, представленную на сайте. |
||
# Из |
# Из предъявляемого идентификатора интернет-сервис определяет URL конечной точки OpenID-провайдера, используемого конечным пользователем. Предъявляемый идентификатор может содержать только Идентификатор провайдера. В этом случае конечный пользователь указывает свой заявленный идентификатор, взаимодействуя с провайдером. |
||
# |
# Опционально интернет-сервис и OpenID-провайдер создают общий [[Ключ (криптография)|секретный ключ]] для [[Message authentication code|кода аутентификации сообщения]] по протоколу [[Протокол Диффи — Хеллмана|Диффи-Хеллмана]]. С помощью кода аутентификации сообщения интернет-сервис аутентифицирует сообщение от провайдера без дополнительных запросов к нему для проверки подлинности. |
||
# В режиме <code>checkid_setup</code> |
# В режиме <code>checkid_setup</code> интернет-сервис перенаправляет браузер пользователя на сайт провайдера для дальнейшей аутентификации. В режиме <code>checkid_immediate</code> коммуникация браузера с провайдером происходит незаметно для пользователя. |
||
# Провайдер проверяет, [[Авторизация|авторизирован]] ли пользователь на сервере и хочет ли он аутентифицироваться на |
# Провайдер проверяет, [[Авторизация|авторизирован]] ли пользователь на сервере и хочет ли он аутентифицироваться на интернет-сервисе. Спецификация OpenID не описывает процесс аутентификации пользователя на стороне провайдера. |
||
# Провайдер перенаправляет браузер пользователя назад в |
# Провайдер перенаправляет браузер пользователя назад в интернет-сервис, передавая сервису результат аутентификации. |
||
# Интернет-сервис проверяет подлинность информации, полученной от провайдера, включая возвращённый URL, информацию о пользователе, одноразовую метку (nonce) и подпись сообщения. Если на шаге 3 был создан общий секретный ключ, то проверка происходит с помощью него. Если ключ создан не был, то |
# Интернет-сервис проверяет подлинность информации, полученной от провайдера, включая возвращённый URL, информацию о пользователе, одноразовую метку (nonce) и подпись сообщения. Если на шаге 3 был создан общий секретный ключ, то проверка происходит с помощью него. Если ключ создан не был, то интернет-сервис отправляет провайдеру дополнительный запрос (<code>check_authentication</code>) для проверки подлинности. В первом случае интернет-сервис называется немым (''dumb''), а во втором — зависимой стороной без памяти (''stateless''). |
||
# В случае успешной проверки |
# В случае успешной проверки интернет-сервис аутентифицирует пользователя{{sfn|OpenID Authentication 2.0 Specification|loc= Protocol Overview}}. |
||
== OpenID Foundation == |
== OpenID Foundation == |
||
OpenID Foundation (OIDF) — это некоммерческая организация, которая была сформирована в июне 2007 года, чтобы управлять авторскими правами, товарными знаками, маркетинговыми компаниями и другой деятельностью, связанной с OpenID |
OpenID Foundation (OIDF) — это некоммерческая организация, которая была сформирована в июне 2007 года для того, чтобы управлять авторскими правами, товарными знаками, маркетинговыми компаниями и другой деятельностью, связанной с OpenID-сообществом{{sfn|OpenID Foundation}}. |
||
Совет директоров организации составляют 4 члена сообщества и 8 корпоративных членов{{sfn|OpenID Foundation Leadership}}: |
Совет директоров организации составляют 4 члена сообщества и 8 корпоративных членов{{sfn|OpenID Foundation Leadership}}: |
||
Строка 95: | Строка 91: | ||
|} |
|} |
||
В США в марте 2008 года OpenID Foundation зарегистрировала товарный знак OpenID. Ранее он принадлежал компании NetMesh Inc. В Европе 31 августа 2007 года товарный знак OpenID был зарегистрирован OpenID Europe Foundation. |
В США в марте 2008 года OpenID Foundation зарегистрировала товарный знак OpenID. Ранее он принадлежал компании NetMesh Inc. В Европе 31 августа 2007 года товарный знак OpenID был зарегистрирован OpenID Europe Foundation{{sfn|USPTO Assignments on the Web - OpenID}}. |
||
== История версий == |
== История версий == |
||
=== OpenID 1.1 === |
=== OpenID 1.1 === |
||
OpenID |
OpenID-аутентификация предоставляет конечному пользователю способ доказать свою личность на сайте без ввода его пароля, e-mail или другой информации, которую он не желает вводить на данном ресурсе. Спецификация OpenID 1.1 не предусматривает какого-либо механизма для обмена информацией о профиле конечного пользователя{{sfn|OpenID Authentication 1.1|loc= Delegating Authentication}}. |
||
=== OpenID 2.0 === |
=== OpenID 2.0 === |
||
Основным отличием OpenID |
Основным отличием OpenID 2.0 от OpenID 1.1 для конечного пользователя является возможность использования XRI в качестве идентификатора. OpenID 2.0, в отличие от OpenID 1.1, поддерживает алгоритм [[SHA256|HMAC-SHA256]] — 256-битной ({{URL|http://www.ietf.org/rfc/rfc3174.txt|[RFC2104]}} цифровой подписи, что делает аутентификацию OpenID-сообщений безопаснее. В OpenID 2.0 появился механизм расширений, позволяющий добавлять к аутентификационным запросам и ответам дополнительную информацию{{sfn|OpenID Authentication 2.0 Specification|loc= Extensions}}. |
||
OpenID 2.0 совместим с OpenID 1.1{{sfn|OpenID Authentication 2.0 Specification|loc= OpenID Authentication 1.1 Compatibility}}. |
OpenID 2.0 совместим с OpenID 1.1{{sfn|OpenID Authentication 2.0 Specification|loc= OpenID Authentication 1.1 Compatibility}}. |
||
=== OpenID Connect === |
=== OpenID Connect === |
||
Третье поколение OpenID-технологии, которое представляет |
Третье поколение OpenID-технологии, которое представляет собой аутентификационную надстройку над протоколом [[Авторизация|авторизации]] [[OAuth|OAuth 2.0]]. OpenID Connect позволяет интернет-ресурсам проверить личность пользователя на основе [[Аутентификация|аутентификации]], выполненной авторизационным сервером. Для работы используется [[REST|RESTful]]<nowiki/> API, описанный в спецификации. Также в OpenID Connect определены дополнительные механизмы для надёжного шифрования и цифровой подписи. Стандарт позволяет использовать дополнительные возможности, такие как управление сессиями и обнаружение OpenID-провайдеров{{sfn|Final: OpenID Connect Core 1.0}}. |
||
В то время как для интеграции стандарта OAuth 1.0a с OpenID 2.0 требуется расширение, в OpenID Connect |
В то время как для интеграции стандарта OAuth 1.0a с OpenID 2.0 требуется расширение, в OpenID Connect возможности OAuth 2.0 уже интегрированы с самим протоколом{{sfn|Welcome to OpenID Connect}}. |
||
== Уязвимости == |
== Уязвимости == |
||
=== Фишинговые атаки === |
=== Фишинговые атаки === |
||
Некоторые исследователи считают |
Некоторые исследователи считают, что протокол OpenID уязвим для [[Фишинг|фишинговых атак]], когда вместо провайдера злоумышленники направляют конечного пользователя на сайт с похожим дизайном. Если пользователь не замечает подмены, то он вводит свои аутентификационные данные (логин, пароль). В результате злоумышленники могут представляться интернет-ресурсам данным пользователем и получить доступ к его информации, хранящейся на этих ресурсах{{sfn|A security analysis of OpenID|p=79}}. |
||
Также возможны фишинговые атаки, когда подделывается сайт, поддерживающий OpenID-авторизацию с целью получения от провайдера информации о пользователе. Используя уязвимость |
Также возможны фишинговые атаки, когда подделывается сайт, поддерживающий OpenID-авторизацию с целью получения от провайдера информации о пользователе. Используя уязвимость «скрытая переадресация» злоумышленники могут создать для пользователя иллюзию, что информация запрашивается настоящим сайтом{{sfn|Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID}}. |
||
OpenID не содержит механизмов предотвращения фишинговых атак. Ответственность за фишинговые атаки перекладывается на провайдеров OpenID{{sfn|OpenID Authentication 2.0 Specification|loc= User Interface Considerations}}. |
OpenID не содержит механизмов предотвращения фишинговых атак. Ответственность за фишинговые атаки перекладывается на провайдеров OpenID{{sfn|OpenID Authentication 2.0 Specification|loc= User Interface Considerations}}. |
||
Строка 123: | Строка 119: | ||
=== Атака «Человек посередине» при незащищённом соединении === |
=== Атака «Человек посередине» при незащищённом соединении === |
||
Если для защиты соединения между пользователем и OpenID |
Если для защиты соединения между пользователем и OpenID-провайдером не используются протоколы [[SSL|TLS/SSL]], то на последней стадии аутентификации возникает уязвимость. Для перенаправления пользователя от себя к интернет-сервису провайдер передаёт пользователю специальный URL. Проблема заключается в том, что любой, кто может получить этот URL (например, путём сниффинга витой пары), может воспроизвести его и получить доступ на сайт как пользователь. Некоторые провайдеры для защиты от этой атаки используют одноразовый код ([[Nonce]]), который позволяет воспользоваться данным URL только один раз. Нонс-решение работает только в случае, когда Пользователь первым использует URL. Однако злоумышленник, который прослушивает канал связи и [[Man-In-The-Middle|находится между пользователем и провайдером]], может получить URL и немедленно прервать TCP-соединение пользователя, а затем выполнить атаку. Таким образом, одноразовые коды защищают только от пассивных злоумышленников, но не могут предотвратить атак активного злоумышленника. Использование TLS / SSL в процессе аутентификации устраняет этот риск{{sfn|Single Sign-On for the Internet: A Security Story}}. |
||
=== Переиспользование идентификатора === |
=== Переиспользование идентификатора === |
||
Пользователь может поменять OpenID |
Пользователь может поменять OpenID-провайдера, освободив таким образом свой идентификатор у предыдущего провайдера. Новый пользователь может занять этот идентификатор и использовать его на тех же сайтах, что и предыдущий пользователь. Это даст новому пользователю доступ ко всей информации, связанной с этим идентификатором. Данная ситуация может возникнуть случайно - необязательно, чтобы новый пользователь был злоумышленником и хотел получить доступ к указанной информации{{sfn|A security analysis of OpenID|loc=OpenID Recycling|p=79}}. |
||
В спецификации OpenID 2.0 для решения проблемы переиспользования идентификатора рекомендуется использовать ''фрагменты'' - к идентификатору должен добавляться фрагмент, уникальный для каждого пользователя{{sfn|OpenID Authentication 2.0 Specification|loc= Normalization}}. |
В спецификации OpenID 2.0 для решения проблемы переиспользования идентификатора рекомендуется использовать ''фрагменты'' - к идентификатору должен добавляться фрагмент, уникальный для каждого пользователя{{sfn|OpenID Authentication 2.0 Specification|loc= Normalization}}. |
||
Строка 133: | Строка 129: | ||
В 2012 году исследователи опубликовали работу, описывающую две уязвимости в OpenID. Обе уязвимости позволяют злоумышленнику получить доступ к аккаунту жертвы{{sfn|Signing Me onto Your Accounts through Facebook and Google}}. |
В 2012 году исследователи опубликовали работу, описывающую две уязвимости в OpenID. Обе уязвимости позволяют злоумышленнику получить доступ к аккаунту жертвы{{sfn|Signing Me onto Your Accounts through Facebook and Google}}. |
||
Первая уязвимость использует OpenID Attribute Exchange. Проблема заключается в том, что некоторые |
Первая уязвимость использует OpenID Attribute Exchange. Проблема заключается в том, что некоторые интернет-сервисы не проверяют данные, переданные через Attribute Exchange. Если Attribute Exchange используется для передачи нечувствительной к подмене информации о пользователе (например, пол), то данной уязвимостью воспользоваться не удастся. Однако Attribute Exchange может также использоваться для передачи, например, email пользователя. Злоумышленник осуществляет попытку аутентификации на сайте зависимой стороны и добавляет в ответ провайдера email жертвы. Если зависимая сторона не проверяет подлинность этой информации, то злоумышленник будет идентифицирован как жертва. Так можно получить доступ к любому зарегистрированному аккаунту. Согласно отчёту исследователей, этой атаке были подвержены многие популярные сайты, включая [[Yahoo! Mail]]{{sfn|Signing Me onto Your Accounts through Facebook and Google|loc=Google ID (and OpenID in general)|p=6}}. |
||
Вторая уязвимость связана с ошибкой на стороне провайдера и тоже позволяет получить доступ к аккаунту на сайте зависимой стороны. Ответ провайдера содержит поле ''openid.ext1.value.email'', которое обрабатывается зависимой стороной как email пользователя. Однако тип данных, который добавляется провайдером в данное поле может контролироваться злоумышленником - запрос к провайдеру содержит поле ''type.email'' с ссылкой на схему, описывающую данное поле. Атакующий может добавить в ''type.email'' ссылку на схему, описывающую имя пользователя. Если злоумышленник может зарегистрироваться на сайте провайдера с именем, например, alice@example.com, то провайдер добавит это имя в поле ''openid.ext1.value.email'' и зависимая сторона будет считать, что аккаунт с данным email принадлежит злоумышленнику. Уязвимыми были признаны реализации [[Google (компания)|Google]] и [[PayPal|Paypal]]. |
Вторая уязвимость связана с ошибкой на стороне провайдера и тоже позволяет получить доступ к аккаунту на сайте зависимой стороны. Ответ провайдера содержит поле ''openid.ext1.value.email'', которое обрабатывается зависимой стороной как email пользователя. Однако тип данных, который добавляется провайдером в данное поле может контролироваться злоумышленником - запрос к провайдеру содержит поле ''type.email'' с ссылкой на схему, описывающую данное поле. Атакующий может добавить в ''type.email'' ссылку на схему, описывающую имя пользователя. Если злоумышленник может зарегистрироваться на сайте провайдера с именем, например, alice@example.com, то провайдер добавит это имя в поле ''openid.ext1.value.email'' и зависимая сторона будет считать, что аккаунт с данным email принадлежит злоумышленнику. Уязвимыми были признаны реализации [[Google (компания)|Google]] и [[PayPal|Paypal]]{{sfn|Signing Me onto Your Accounts through Facebook and Google|loc=Google ID (and OpenID in general)|p=6}}. |
||
OpenID опубликовала |
OpenID опубликовала отчёты по обеим уязвимостям, и были выпущены обновления, исправляющие их{{sfn|Attribute Exchange Security Alert}}{{sfn|Vulnerability report: Data confusion}}. |
||
== См. также == |
== См. также == |
||
* [[ |
* [[ResearcherID]] |
||
* [[ |
* [[SQRL]] |
||
* [[Mozilla Persona]] |
|||
* [[TypeKey]] |
|||
* [[uID (uCoz)|uID]] |
|||
* [[Google Friend Connect]] |
|||
* [[Facebook Connect]]<ref>{{Cite web|url=https://developers.facebook.com/blog/post/2008/05/09/announcing-facebook-connect/|title=Announcing Facebook Connect - Facebook for Developers|publisher=Facebook Developers|lang=en-US|accessdate=2015-11-09}}</ref> |
|||
* [[Технология единого входа]] |
|||
* [[Единая система идентификации и аутентификации]] |
|||
== Примечания == |
== Примечания == |
||
{{примечания |
{{примечания}} |
||
== Литература == |
== Литература == |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/specs/openid-authentication-2_0.html |
|url = http://openid.net/specs/openid-authentication-2_0.html |
||
|title = OpenID Authentication 2.0 Specification |
|title = OpenID Authentication 2.0 Specification |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = OpenID Authentication 2.0 Specification |
|ref = OpenID Authentication 2.0 Specification |
||
|archive-date = 2011-10-22 |
|||
|archive-url = https://web.archive.org/web/20111022193539/http://openid.net/specs/openid-authentication-2_0.html |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/2007/12/03/microsoft-and-google-both-ship-openid/ |
|url = http://openid.net/2007/12/03/microsoft-and-google-both-ship-openid/ |
||
|title = Microsoft and Google Both Ship OpenID |
|title = Microsoft and Google Both Ship OpenID |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Microsoft and Google ship OpenID |
|ref = Microsoft and Google ship OpenID |
||
|archive-date = 2017-06-24 |
|||
|archive-url = https://web.archive.org/web/20170624105351/http://openid.net/2007/12/03/microsoft-and-google-both-ship-openid/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://www-03.ibm.com/press/us/en/pressrelease/23461.wss |
|url = http://www-03.ibm.com/press/us/en/pressrelease/23461.wss |
||
|title = Technology Leaders Join OpenID Foundation |
|title = Technology Leaders Join OpenID Foundation |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://www-03.ibm.com/ |
|website = http://www-03.ibm.com/ |
||
|publisher = IBM |
|publisher = IBM |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Technology Leaders Join OpenID Foundation |
|ref = Technology Leaders Join OpenID Foundation |
||
|archive-date = 2008-02-10 |
|||
|archive-url = https://web.archive.org/web/20080210060958/http://www-03.ibm.com/press/us/en/pressrelease/23461.wss |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://steamcommunity.com/dev |
|url = http://steamcommunity.com/dev |
||
|title = Документация Steam Web API |
|title = Документация Steam Web API |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://steamcommunity.com/ |
|website = http://steamcommunity.com/ |
||
|publisher = Steam |
|publisher = Steam |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = ru |
|lang = ru |
||
|ref = Документация Steam Web API |
|ref = Документация Steam Web API |
||
|archive-date = 2012-02-10 |
|||
|archive-url = https://web.archive.org/web/20120210081231/http://steamcommunity.com/dev/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/specs/openid-attribute-exchange-1_0.html |
|url = http://openid.net/specs/openid-attribute-exchange-1_0.html |
||
|title = OpenID Attribute Exchange 1.0 |
|title = OpenID Attribute Exchange 1.0 |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Final: OpenID Attribute Exchange 1.0 - Final |
|ref = Final: OpenID Attribute Exchange 1.0 - Final |
||
|archive-date = 2017-11-20 |
|||
|archive-url = https://web.archive.org/web/20171120035017/http://openid.net/specs/openid-attribute-exchange-1_0.html |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/2009/12/16/openid-2009-year-in-review/ |
|url = http://openid.net/2009/12/16/openid-2009-year-in-review/ |
||
|title = OpenID 2009 Year in Review |
|title = OpenID 2009 Year in Review |
||
|author = |
|author = |
||
|date = 2009-12-15 |
|date = 2009-12-15 |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = OpenID 2009 Year in Review |
|ref = OpenID 2009 Year in Review |
||
|archive-date = 2017-07-03 |
|||
|archive-url = https://web.archive.org/web/20170703230009/http://openid.net/2009/12/16/openid-2009-year-in-review/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/specs/openid-connect-core-1_0-final.html |
|url = http://openid.net/specs/openid-connect-core-1_0-final.html |
||
|title = OpenID Connect Core 1.0 |
|title = OpenID Connect Core 1.0 |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Final: OpenID Connect Core 1.0 |
|ref = Final: OpenID Connect Core 1.0 |
||
|archive-date = 2014-12-18 |
|||
|archive-url = https://web.archive.org/web/20141218121055/http://openid.net/specs/openid-connect-core-1_0-final.html |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/2014/11/09/errata-to-openid-connect-specifications-approved/ |
|url = http://openid.net/2014/11/09/errata-to-openid-connect-specifications-approved/ |
||
|title = Errata to OpenID Connect Specifications Approved |
|title = Errata to OpenID Connect Specifications Approved |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Errata to OpenID Connect Specifications Approved |
|ref = Errata to OpenID Connect Specifications Approved |
||
|archive-date = 2014-12-03 |
|||
|archive-url = https://web.archive.org/web/20141203073444/http://openid.net/2014/11/09/errata-to-openid-connect-specifications-approved/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://lj-dev.livejournal.com/683939.html |
|url = http://lj-dev.livejournal.com/683939.html |
||
|title = Distributed Identity: Yadis |
|title = Distributed Identity: Yadis |
||
|author = Brad Fitzpatrick |
|author = Brad Fitzpatrick |
||
|date = 2005-05-16 |
|date = 2005-05-16 |
||
|website = http://lj-dev.livejournal.com/ |
|website = http://lj-dev.livejournal.com/ |
||
|publisher = |
|publisher = |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Distributed Identity: Yadis |
|ref = Distributed Identity: Yadis |
||
|archive-date = 2017-07-20 |
|||
|archive-url = https://web.archive.org/web/20170720075443/http://lj-dev.livejournal.com/683939.html |
|||
|deadlink = no |
|||
}} |
}} |
||
Строка 268: | Строка 284: | ||
|date = 2005-07-14 |
|date = 2005-07-14 |
||
|website = http://www.danga.com/ |
|website = http://www.danga.com/ |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = OpenID: an actually distributed identity system |
|ref = OpenID: an actually distributed identity system |
||
Строка 277: | Строка 293: | ||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/specs/openid-authentication-1_1.html |
|url = http://openid.net/specs/openid-authentication-1_1.html |
||
|title = OpenID Authentication 1.1 Specification |
|title = OpenID Authentication 1.1 Specification |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = OpenID Authentication 1.1 |
|ref = OpenID Authentication 1.1 |
||
|archive-date = 2017-11-18 |
|||
|archive-url = https://web.archive.org/web/20171118073341/http://openid.net/specs/openid-authentication-1_1.html |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = https://blogs.oracle.com/theaquarium/openidsuncom-is-open-for-business |
|url = https://blogs.oracle.com/theaquarium/openidsuncom-is-open-for-business |
||
|title = OpenID.sun.com is open for business |
|title = OpenID.sun.com is open for business |
||
|author = |
|author = |
||
|date = 2007- |
|date = 2007-06-06 |
||
|website = https://blogs.oracle.com/ |
|website = https://blogs.oracle.com/ |
||
|publisher = Oracle |
|publisher = Oracle |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = OpenID.sun.com is open for business |
|ref = OpenID.sun.com is open for business |
||
|archive-date = 2017-12-01 |
|||
|archive-url = https://web.archive.org/web/20171201051637/https://blogs.oracle.com/theaquarium/openidsuncom-is-open-for-business |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://assignments.uspto.gov/assignments/q?db=tm&sno=78899244 |
|url = http://assignments.uspto.gov/assignments/q?db=tm&sno=78899244 |
||
|title = USPTO Assignments on the Web - OpenID |
|title = USPTO Assignments on the Web - OpenID |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://assignments.uspto.gov/ |
|website = http://assignments.uspto.gov/ |
||
|publisher = United States Patent and Trademark Office |
|publisher = United States Patent and Trademark Office |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = USPTO Assignments on the Web - OpenID |
|ref = USPTO Assignments on the Web - OpenID |
||
|archive-date = 2013-10-10 |
|||
|archive-url = https://web.archive.org/web/20131010210046/http://assignments.uspto.gov/assignments/q?db=tm&sno=78899244 |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = https://www.livejournal.com/openid/about.bml |
|url = https://www.livejournal.com/openid/about.bml |
||
|title = What is OpenID? |
|title = What is OpenID? |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = https://www.livejournal.com/ |
|website = https://www.livejournal.com/ |
||
|publisher = LiveJournal |
|publisher = LiveJournal |
||
|accessdate = 2005- |
|accessdate = 2005-06-27 |
||
|lang = en |
|lang = en |
||
|ref = LiveJournal OpenID |
|ref = LiveJournal OpenID |
||
|archive-date = 2005-06-30 |
|||
|archive-url = https://web.archive.org/web/20050630000840/http://www.livejournal.com/openid/about.bml |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/what-is-openid/ |
|url = http://openid.net/what-is-openid/ |
||
|title = What is OpenID? |
|title = What is OpenID? |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = What is OpenID? |
|ref = What is OpenID? |
||
|archive-date = 2017-12-01 |
|||
|archive-url = https://web.archive.org/web/20171201001251/http://openid.net/what-is-openid/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/foundation/ |
|url = http://openid.net/foundation/ |
||
|title = OpenID Foundation |
|title = OpenID Foundation |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = OpenID Foundation |
|ref = OpenID Foundation |
||
|archive-date = 2017-11-23 |
|||
|archive-url = https://web.archive.org/web/20171123021517/http://openid.net/foundation/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/foundation/leadership/ |
|url = http://openid.net/foundation/leadership/ |
||
|title = OpenID Foundation Leadership |
|title = OpenID Foundation Leadership |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = OpenID Foundation Leadership |
|ref = OpenID Foundation Leadership |
||
|archive-date = 2014-06-24 |
|||
|archive-url = https://web.archive.org/web/20140624085758/http://openid.net/foundation/leadership/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/connect/ |
|url = http://openid.net/connect/ |
||
|title = Welcome to OpenID Connect |
|title = Welcome to OpenID Connect |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Welcome to OpenID Connect |
|ref = Welcome to OpenID Connect |
||
|archive-date = 2017-12-12 |
|||
|archive-url = https://web.archive.org/web/20171212005555/http://openid.net/connect/ |
|||
|deadlink = no |
|||
}} |
}} |
||
Строка 379: | Строка 419: | ||
|ответственный = |
|ответственный = |
||
|автор издания = |
|автор издания = |
||
|страницы = |
|страницы = 73—84 |
||
|издание = |
|издание = |
||
|тип = |
|тип = |
||
|место = |
|место = |
||
|издательство = Springer |
|издательство = Springer |
||
|год = |
|год = |
||
|isbn = |
|isbn = |
||
|issn = |
|issn = |
||
Строка 395: | Строка 435: | ||
* {{cite web |
* {{cite web |
||
|url = http://www.tetraph.com/blog/covert-redirect/covert-redirect-vulnerability-related-to-oauth-2-0-and-openid/ |
|url = http://www.tetraph.com/blog/covert-redirect/covert-redirect-vulnerability-related-to-oauth-2-0-and-openid/ |
||
|title = Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID |
|title = Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://www.tetraph.com/ |
|website = http://www.tetraph.com/ |
||
|publisher = Teltraph |
|publisher = Teltraph |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID |
|ref = Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID |
||
|archive-date = 2017-10-09 |
|||
|archive-url = https://web.archive.org/web/20171009144346/http://www.tetraph.com/blog/covert-redirect/covert-redirect-vulnerability-related-to-oauth-2-0-and-openid/ |
|||
|deadlink = no |
|||
}} |
}} |
||
Строка 418: | Строка 461: | ||
|место = |
|место = |
||
|издательство = ACM |
|издательство = ACM |
||
|год = |
|год = |
||
|isbn = 9781595937032 |
|isbn = 9781595937032 |
||
|issn = |
|issn = |
||
Строка 440: | Строка 483: | ||
|место = |
|место = |
||
|издательство = BlackHat USA |
|издательство = BlackHat USA |
||
|год = |
|год = |
||
|isbn = |
|isbn = |
||
|issn = |
|issn = |
||
Строка 462: | Строка 505: | ||
|место = |
|место = |
||
|издательство = Microsoft Research |
|издательство = Microsoft Research |
||
|год = |
|год = |
||
|isbn = |
|isbn = |
||
|issn = |
|issn = |
||
Строка 473: | Строка 516: | ||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/2011/05/05/attribute-exchange-security-alert/ |
|url = http://openid.net/2011/05/05/attribute-exchange-security-alert/ |
||
|title = Attribute Exchange Security Alert |
|title = Attribute Exchange Security Alert |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Attribute Exchange Security Alert |
|ref = Attribute Exchange Security Alert |
||
|archive-date = 2017-07-31 |
|||
|archive-url = https://web.archive.org/web/20170731115627/http://openid.net/2011/05/05/attribute-exchange-security-alert/ |
|||
|deadlink = no |
|||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|url = http://openid.net/2012/03/14/vulnerability-report-data-confusion/ |
|url = http://openid.net/2012/03/14/vulnerability-report-data-confusion/ |
||
|title = Vulnerability report: Data confusion |
|title = Vulnerability report: Data confusion |
||
|author = |
|author = |
||
|date = |
|date = |
||
|website = http://openid.net/ |
|website = http://openid.net/ |
||
|publisher = OpenID Foundation |
|publisher = OpenID Foundation |
||
|accessdate = 2017-12- |
|accessdate = 2017-12-05 |
||
|lang = en |
|lang = en |
||
|ref = Vulnerability report: Data confusion |
|ref = Vulnerability report: Data confusion |
||
|archive-date = 2019-09-05 |
|||
|archive-url = https://web.archive.org/web/20190905153025/https://openid.net/2012/03/14/vulnerability-report-data-confusion/ |
|||
|deadlink = no |
|||
}} |
|||
* {{cite web |
|||
|url = https://developers.facebook.com/blog/post/2008/05/09/announcing-facebook-connect/ |
|||
|title = Announcing Facebook Connect - Facebook for Developers |
|||
|author = |
|||
|date = |
|||
|website = https://developers.facebook.com/ |
|||
|publisher = Facebook Developers |
|||
|accessdate = 2017-12-05 |
|||
|lang = en |
|||
|ref = Announcing Facebook Connect - Facebook for Developers |
|||
|archive-date = 2017-08-26 |
|||
|archive-url = https://web.archive.org/web/20170826011517/https://developers.facebook.com/blog/post/2008/05/09/announcing-facebook-connect/ |
|||
|deadlink = no |
|||
}} |
}} |
||
Строка 503: | Строка 567: | ||
[[Категория:Аутентификация]] |
[[Категория:Аутентификация]] |
||
[[Категория:Уникальные идентификаторы]] |
[[Категория:Уникальные идентификаторы]] |
||
[[Категория: |
[[Категория:Стандарты Интернета]] |
||
[[Категория:Открытые стандарты]] |
|||
{{Кандидат в добротные статьи|17 ноября 2017}} |
|||
{{Добротная статья|Теория информации и криптография}} |
Текущая версия от 16:05, 13 августа 2024
OpenID — открытый стандарт децентрализованной системы аутентификации, предоставляющей пользователю возможность создать единую учётную запись для аутентификации на множестве не связанных друг с другом интернет-ресурсов, используя услуги третьих лиц[1].
Базовой функцией OpenID является предоставление портативного, клиент-ориентированного, цифрового идентификатора для свободного и децентрализованного использования[2].
Стандарт описывает процесс коммуникации интернет-ресурсов (Relying Parties), требующих аутентификации, и провайдеров OpenID (OpenID Providers). Существует несколько OpenID-провайдеров, которые предоставляют хостинг OpenID URL[3]. Аутентификацию OpenID используют в том числе Google, Yahoo!, AOL, LiveJournal, MySpace, IBM[4], Steam[5] и Orange. Расширение стандарта (the OpenID Attribute Exchange) облегчает передачу пользовательских данных, таких как имя или пол, от OpenID-провайдера до интернет-ресурса[6].
На декабрь 2009 года существовало более 1 миллиарда аккаунтов OpenID и около 9 миллионов сайтов, поддерживающих технологию OpenID[7].
Текущая версия стандарта, OpenID Connect 1.0, вышла в феврале 2014 года и была обновлена в ноябре 2014 года[8][9].
История возникновения
[править | править код]В 2005 году Брэд Фицпатрик, известный как создатель LiveJournal, работавший на то время в Six Apart, предложил интернет-сообществу концепцию единой учётной записи для разных интернет-ресурсов[10]. Он предложил хранить свою учётную запись на одном сервере, а при регистрации на других интернет-ресурсах пользоваться этой учётной записью. Первоначально протокол называют Yadis (акроним от «Yet another distributed identity system»), название OpenID протокол получил уже после того, как Six Apart зарегистрировало доменное имя openid.net для своего проекта. Вскоре поддержка OpenID была реализована на LiveJournal, и эта технология быстро привлекла к себе внимание интернет-сообщества[11].
В 2006 была создана первая спецификация OpenID — OpenID Authentication 1.1[12].
5 декабря 2007 года Sun Microsystems, VeriSign и ряд компаний, участвующих в разработке OpenID, выпустили спецификацию OpenID 2.0 и официально заявили, что не будут выдвигать претензии в случае использования технологии OpenID кем-либо, если только действия лица, использующего технологию, не будут направлены против реализации технологии или на правообладание технологией[13].
Товарный знак OpenID был зарегистрирован в США в марте 2008 года[14].
Вход через OpenID с точки зрения конечного пользователя
[править | править код]На сайте, например, example.com
, находится форма входа с единственным полем ввода для OpenID-идентификатора. Зачастую рядом с таким полем располагается логотип OpenID. Для того, чтобы авторизоваться на данном сайте с помощью своего идентификатора, например, pupkin.openid-provider.org
, зарегистрированного у OpenID-провайдера openid-provider.org
, пользователю необходимо ввести свой идентификатор в предлагаемую на сайте форму входа. После этого сайт example.com
перенаправляет пользователя на сайт провайдера. Сайт провайдера запрашивает у пользователя подтверждение, действительно ли пользователь желает предоставить информацию о своей учётной записи. Если пользователь соглашается, то сайт провайдера перенаправляет пользователя обратно на сайт зависимой стороны. При обратном перенаправлении провайдер передаст информацию о пользователе зависимой стороне[15].
OpenID-провайдером, например, является Живой Журнал, поэтому в качестве OpenID-идентификатора можно использовать адрес своего дневника в Live Journal[16].
Общее описание протокола
[править | править код]Возможности OpenID
[править | править код]OpenID позволяет пользователю использовать одну учетную запись, зарегистрированную у OpenID-провайдера, на множестве других сайтов. Пользователь может выбрать, какую информацию предоставить сайту. Обмен информацией профиля или другими сведениями, не описанными в спецификации OpenID, может быть реализован поверх протокола OpenID с помощью дополнительных видов обслуживания. Для этого предусмотрен официально поддерживаемый протоколом OpenID механизм расширения протокола[17].
Существует возможность делегирования OpenID. Это означает, что владелец некоего доменного имени может использовать его в качестве синонима (алиаса) к уже существующему OpenID-идентификатору, полученному у любого провайдера OpenID. Для этого необходимо на страницу, используемую в качестве делегата, добавить несколько мета-тегов[18].
Децентрализованность
[править | править код]Система OpenID — децентрализованная система. Это значит, что нет какой-либо центральной службы или организации, которая разрешала бы использование системы или регистрировала бы запрашивающие аутентификацию OpenID интернет-ресурсы или провайдеров OpenID. Конечный пользователь может свободно выбирать, какого провайдера OpenID использовать, и сохранять Идентификатор в случае изменения провайдера OpenID[1].
Технологические требования
[править | править код]Стандарт не требует JavaScript или современных браузеров, однако схема аутентификации хорошо совместима с подходом AJAX. Это значит, что конечный пользователь может проходить аутентификацию на сайте, не покидая текущую страницу. В этом случае коммуникация интернет-ресурса с OpenID-провайдером будет проходить в фоновом режиме. OpenID-аутентификация использует только стандартные HTTP(S) запросы и ответы, поэтому стандарт не требует от пользователя установки дополнительного программного обеспечения. Для работы OpenID не требуется использовать cookie или какие-либо другие механизмы управления сессией. Различные расширения могут упростить использование OpenID, но не являются обязательными для использования стандарта[2].
Устройство протокола
[править | править код]Терминология
[править | править код]- Идентификатор (Identifier) — HTTP или HTTPS URI (URL) или XRI (начиная с OpenID 2.0)[2]. В протоколе используется несколько видов идентификаторов.
- Интернет-сервис (Relying Party) — веб-приложение, которое хочет проверить подлинность идентификатора пользователя.
- Провайдер OpenID (OpenID Provider) — сервер OpenID-аутентификации, который подтверждает интернет-сервису подлинность идентификатора конечного пользователя.
- URL конечной точки провайдера (OpenID Provider Endpoint URL) — URL, который принимает запросы аутентификации по протоколу OpenID и может быть получен из предъявляемого идентификатора.
- Идентификатор провайдера (OP Identifier) — идентификатор, по которому можно определить OpenID-провайдера.
- Предъявляемый идентификатор (User-Supplied Identifier) — идентификатор, предъявляемый конечным пользователем интернет-сервису. Предъявляемый идентификатор может совпадать с OP-идентификатором.
- Заявленный идентификатор (Claimed Identifier) — идентификатор, о владении которым заявляет пользователь. Проверка данного утверждения является главной целью протокола OpenID. Заявленный идентификатор может быть получен из предъявленного путём его нормализации[19].
Механизм работы
[править | править код]- Конечный пользователь инициирует процесс аутентификации на интернет-сервисе. Для этого он вводит предъявляемый идентификатор в форму входа, представленную на сайте.
- Из предъявляемого идентификатора интернет-сервис определяет URL конечной точки OpenID-провайдера, используемого конечным пользователем. Предъявляемый идентификатор может содержать только Идентификатор провайдера. В этом случае конечный пользователь указывает свой заявленный идентификатор, взаимодействуя с провайдером.
- Опционально интернет-сервис и OpenID-провайдер создают общий секретный ключ для кода аутентификации сообщения по протоколу Диффи-Хеллмана. С помощью кода аутентификации сообщения интернет-сервис аутентифицирует сообщение от провайдера без дополнительных запросов к нему для проверки подлинности.
- В режиме
checkid_setup
интернет-сервис перенаправляет браузер пользователя на сайт провайдера для дальнейшей аутентификации. В режимеcheckid_immediate
коммуникация браузера с провайдером происходит незаметно для пользователя. - Провайдер проверяет, авторизирован ли пользователь на сервере и хочет ли он аутентифицироваться на интернет-сервисе. Спецификация OpenID не описывает процесс аутентификации пользователя на стороне провайдера.
- Провайдер перенаправляет браузер пользователя назад в интернет-сервис, передавая сервису результат аутентификации.
- Интернет-сервис проверяет подлинность информации, полученной от провайдера, включая возвращённый URL, информацию о пользователе, одноразовую метку (nonce) и подпись сообщения. Если на шаге 3 был создан общий секретный ключ, то проверка происходит с помощью него. Если ключ создан не был, то интернет-сервис отправляет провайдеру дополнительный запрос (
check_authentication
) для проверки подлинности. В первом случае интернет-сервис называется немым (dumb), а во втором — зависимой стороной без памяти (stateless). - В случае успешной проверки интернет-сервис аутентифицирует пользователя[15].
OpenID Foundation
[править | править код]OpenID Foundation (OIDF) — это некоммерческая организация, которая была сформирована в июне 2007 года для того, чтобы управлять авторскими правами, товарными знаками, маркетинговыми компаниями и другой деятельностью, связанной с OpenID-сообществом[20].
Совет директоров организации составляют 4 члена сообщества и 8 корпоративных членов[21]:
Члены сообщества
• Джон Бредли (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[14].
История версий
[править | править код]OpenID 1.1
[править | править код]OpenID-аутентификация предоставляет конечному пользователю способ доказать свою личность на сайте без ввода его пароля, e-mail или другой информации, которую он не желает вводить на данном ресурсе. Спецификация OpenID 1.1 не предусматривает какого-либо механизма для обмена информацией о профиле конечного пользователя[18].
OpenID 2.0
[править | править код]Основным отличием OpenID 2.0 от OpenID 1.1 для конечного пользователя является возможность использования XRI в качестве идентификатора. OpenID 2.0, в отличие от OpenID 1.1, поддерживает алгоритм HMAC-SHA256 — 256-битной ([RFC2104] цифровой подписи, что делает аутентификацию OpenID-сообщений безопаснее. В OpenID 2.0 появился механизм расширений, позволяющий добавлять к аутентификационным запросам и ответам дополнительную информацию[22].
OpenID 2.0 совместим с OpenID 1.1[23].
OpenID Connect
[править | править код]Третье поколение OpenID-технологии, которое представляет собой аутентификационную надстройку над протоколом авторизации OAuth 2.0. OpenID Connect позволяет интернет-ресурсам проверить личность пользователя на основе аутентификации, выполненной авторизационным сервером. Для работы используется RESTful API, описанный в спецификации. Также в OpenID Connect определены дополнительные механизмы для надёжного шифрования и цифровой подписи. Стандарт позволяет использовать дополнительные возможности, такие как управление сессиями и обнаружение OpenID-провайдеров[8].
В то время как для интеграции стандарта OAuth 1.0a с OpenID 2.0 требуется расширение, в OpenID Connect возможности OAuth 2.0 уже интегрированы с самим протоколом[24].
Уязвимости
[править | править код]Фишинговые атаки
[править | править код]Некоторые исследователи считают, что протокол OpenID уязвим для фишинговых атак, когда вместо провайдера злоумышленники направляют конечного пользователя на сайт с похожим дизайном. Если пользователь не замечает подмены, то он вводит свои аутентификационные данные (логин, пароль). В результате злоумышленники могут представляться интернет-ресурсам данным пользователем и получить доступ к его информации, хранящейся на этих ресурсах[25].
Также возможны фишинговые атаки, когда подделывается сайт, поддерживающий OpenID-авторизацию с целью получения от провайдера информации о пользователе. Используя уязвимость «скрытая переадресация» злоумышленники могут создать для пользователя иллюзию, что информация запрашивается настоящим сайтом[26].
OpenID не содержит механизмов предотвращения фишинговых атак. Ответственность за фишинговые атаки перекладывается на провайдеров OpenID[27].
Для защиты от фишинга пользователи могут использовать дополнительное программное обеспечение, например Microsoft’s Identity Selector[28]. Также существуют решения, не требующие установки дополнительного программного обеспечения, например BeamAuth, использующий для своей работы закладки в браузере[29].
Атака «Человек посередине» при незащищённом соединении
[править | править код]Если для защиты соединения между пользователем и OpenID-провайдером не используются протоколы TLS/SSL, то на последней стадии аутентификации возникает уязвимость. Для перенаправления пользователя от себя к интернет-сервису провайдер передаёт пользователю специальный URL. Проблема заключается в том, что любой, кто может получить этот URL (например, путём сниффинга витой пары), может воспроизвести его и получить доступ на сайт как пользователь. Некоторые провайдеры для защиты от этой атаки используют одноразовый код (Nonce), который позволяет воспользоваться данным URL только один раз. Нонс-решение работает только в случае, когда Пользователь первым использует URL. Однако злоумышленник, который прослушивает канал связи и находится между пользователем и провайдером, может получить URL и немедленно прервать TCP-соединение пользователя, а затем выполнить атаку. Таким образом, одноразовые коды защищают только от пассивных злоумышленников, но не могут предотвратить атак активного злоумышленника. Использование TLS / SSL в процессе аутентификации устраняет этот риск[30].
Переиспользование идентификатора
[править | править код]Пользователь может поменять OpenID-провайдера, освободив таким образом свой идентификатор у предыдущего провайдера. Новый пользователь может занять этот идентификатор и использовать его на тех же сайтах, что и предыдущий пользователь. Это даст новому пользователю доступ ко всей информации, связанной с этим идентификатором. Данная ситуация может возникнуть случайно - необязательно, чтобы новый пользователь был злоумышленником и хотел получить доступ к указанной информации[31].
В спецификации OpenID 2.0 для решения проблемы переиспользования идентификатора рекомендуется использовать фрагменты - к идентификатору должен добавляться фрагмент, уникальный для каждого пользователя[19].
Ошибки аутентификации
[править | править код]В 2012 году исследователи опубликовали работу, описывающую две уязвимости в OpenID. Обе уязвимости позволяют злоумышленнику получить доступ к аккаунту жертвы[32].
Первая уязвимость использует OpenID Attribute Exchange. Проблема заключается в том, что некоторые интернет-сервисы не проверяют данные, переданные через Attribute Exchange. Если Attribute Exchange используется для передачи нечувствительной к подмене информации о пользователе (например, пол), то данной уязвимостью воспользоваться не удастся. Однако Attribute Exchange может также использоваться для передачи, например, email пользователя. Злоумышленник осуществляет попытку аутентификации на сайте зависимой стороны и добавляет в ответ провайдера email жертвы. Если зависимая сторона не проверяет подлинность этой информации, то злоумышленник будет идентифицирован как жертва. Так можно получить доступ к любому зарегистрированному аккаунту. Согласно отчёту исследователей, этой атаке были подвержены многие популярные сайты, включая Yahoo! Mail[33].
Вторая уязвимость связана с ошибкой на стороне провайдера и тоже позволяет получить доступ к аккаунту на сайте зависимой стороны. Ответ провайдера содержит поле openid.ext1.value.email, которое обрабатывается зависимой стороной как email пользователя. Однако тип данных, который добавляется провайдером в данное поле может контролироваться злоумышленником - запрос к провайдеру содержит поле type.email с ссылкой на схему, описывающую данное поле. Атакующий может добавить в type.email ссылку на схему, описывающую имя пользователя. Если злоумышленник может зарегистрироваться на сайте провайдера с именем, например, alice@example.com, то провайдер добавит это имя в поле openid.ext1.value.email и зависимая сторона будет считать, что аккаунт с данным email принадлежит злоумышленнику. Уязвимыми были признаны реализации Google и Paypal[33].
OpenID опубликовала отчёты по обеим уязвимостям, и были выпущены обновления, исправляющие их[34][35].
См. также
[править | править код]Примечания
[править | править код]- ↑ 1 2 OpenID Authentication 2.0 Specification, Abstract.
- ↑ 1 2 3 OpenID Authentication 2.0 Specification.
- ↑ Microsoft and Google ship OpenID.
- ↑ Technology Leaders Join OpenID Foundation.
- ↑ Документация Steam Web API.
- ↑ Final: OpenID Attribute Exchange 1.0 - Final.
- ↑ OpenID 2009 Year in Review.
- ↑ 1 2 Final: OpenID Connect Core 1.0.
- ↑ Errata to OpenID Connect Specifications Approved.
- ↑ Distributed Identity: Yadis.
- ↑ OpenID: an actually distributed identity system.
- ↑ OpenID Authentication 1.1.
- ↑ OpenID.sun.com is open for business.
- ↑ 1 2 USPTO Assignments on the Web - OpenID.
- ↑ 1 2 OpenID Authentication 2.0 Specification, Protocol Overview.
- ↑ LiveJournal OpenID.
- ↑ What is OpenID?.
- ↑ 1 2 OpenID Authentication 1.1, Delegating Authentication.
- ↑ 1 2 OpenID Authentication 2.0 Specification, Normalization.
- ↑ OpenID Foundation.
- ↑ OpenID Foundation Leadership.
- ↑ OpenID Authentication 2.0 Specification, Extensions.
- ↑ OpenID Authentication 2.0 Specification, OpenID Authentication 1.1 Compatibility.
- ↑ Welcome to OpenID Connect.
- ↑ A security analysis of OpenID, p. 79.
- ↑ Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID.
- ↑ OpenID Authentication 2.0 Specification, User Interface Considerations.
- ↑ A security analysis of OpenID, Anti-phishing Techniques, p. 81.
- ↑ Beamauth: Two-factor Web Authentication with a Bookmark.
- ↑ Single Sign-On for the Internet: A Security Story.
- ↑ A security analysis of OpenID, OpenID Recycling, p. 79.
- ↑ Signing Me onto Your Accounts through Facebook and Google.
- ↑ 1 2 Signing Me onto Your Accounts through Facebook and Google, Google ID (and OpenID in general), p. 6.
- ↑ Attribute Exchange Security Alert.
- ↑ Vulnerability report: Data confusion.
Литература
[править | править код]- OpenID Authentication 2.0 Specification (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 22 октября 2011 года.
- Microsoft and Google Both Ship OpenID (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 24 июня 2017 года.
- Technology Leaders Join OpenID Foundation (англ.). http://www-03.ibm.com/. IBM. Дата обращения: 5 декабря 2017. Архивировано 10 февраля 2008 года.
- Документация Steam Web API . http://steamcommunity.com/. Steam. Дата обращения: 5 декабря 2017. Архивировано 10 февраля 2012 года.
- OpenID Attribute Exchange 1.0 (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 20 ноября 2017 года.
- OpenID 2009 Year in Review (англ.). http://openid.net/. OpenID Foundation (15 декабря 2009). Дата обращения: 5 декабря 2017. Архивировано 3 июля 2017 года.
- OpenID Connect Core 1.0 (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 18 декабря 2014 года.
- Errata to OpenID Connect Specifications Approved (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 3 декабря 2014 года.
- Brad Fitzpatrick. Distributed Identity: Yadis (англ.). http://lj-dev.livejournal.com/ (16 мая 2005). Дата обращения: 5 декабря 2017. Архивировано 20 июля 2017 года.
- Brad Fitzpatrick. OpenID: an actually distributed identity system (англ.). http://www.danga.com/ (14 июля 2005). Дата обращения: 5 декабря 2017. Архивировано из оригинала 24 сентября 2005 года.
- OpenID Authentication 1.1 Specification (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 18 ноября 2017 года.
- OpenID.sun.com is open for business (англ.). https://blogs.oracle.com/. Oracle (6 июня 2007). Дата обращения: 5 декабря 2017. Архивировано 1 декабря 2017 года.
- USPTO Assignments on the Web - OpenID (англ.). http://assignments.uspto.gov/. United States Patent and Trademark Office. Дата обращения: 5 декабря 2017. Архивировано 10 октября 2013 года.
- What is OpenID? (англ.). https://www.livejournal.com/. LiveJournal. Дата обращения: 27 июня 2005. Архивировано 30 июня 2005 года.
- What is OpenID? (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 1 декабря 2017 года.
- OpenID Foundation (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 23 ноября 2017 года.
- OpenID Foundation Leadership (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 24 июня 2014 года.
- Welcome to OpenID Connect (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 12 декабря 2017 года.
- Bart van Delft and Martijn Oostdijk. A security analysis of OpenID. — Springer. — С. 73—84.
- Covert Redirect Vulnerability Related to OAuth 2.0 and OpenID (англ.). http://www.tetraph.com/. Teltraph. Дата обращения: 5 декабря 2017. Архивировано 9 октября 2017 года.
- Ben Adida. Beamauth: Two-factor Web Authentication with a Bookmark. — ACM. — С. 48-57. — ISBN 9781595937032. — doi:10.1145/1315245.1315253.
- Eugene Tsyrklevich. Single Sign-On for the Internet: A Security Story. — BlackHat USA.
- 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.
- Attribute Exchange Security Alert (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 31 июля 2017 года.
- Vulnerability report: Data confusion (англ.). http://openid.net/. OpenID Foundation. Дата обращения: 5 декабря 2017. Архивировано 5 сентября 2019 года.
- Announcing Facebook Connect - Facebook for Developers (англ.). https://developers.facebook.com/. Facebook Developers. Дата обращения: 5 декабря 2017. Архивировано 26 августа 2017 года.
Эта статья входит в число добротных статей русскоязычного раздела Википедии. |