Безопасно ли идентифицировать пользователей OpenID по адресу электронной почты, если провайдеру доверяют? - PullRequest
7 голосов
/ 28 января 2012

Я использую DotNetOpenAuth для входа в систему OpenID. Поставщик Google возвращает другой ClaimedIdentifier в зависимости от области звонящего (имя хоста + порт).

Безопасно ли для меня проверять логин на основе адреса электронной почты, возвращенного обратным вызовом аутентификации OpenID, против самого заявленного идентификатора? то есть есть ли способ, которым пользователь может подделать свой адрес электронной почты и, таким образом, получить доступ к учетной записи другого пользователя, если мы проверим по электронной почте вместо заявленного идентификатора?

Я думал, что все будет в порядке , пока поставщик доверяет - т. Е. Мы можем доверять Google, чтобы он не позволял пользователю входить в систему, используя чужой адрес электронной почты.

Ответы [ 2 ]

6 голосов
/ 29 января 2012

Модель безопасности протокола OpenID 2.0 построена на заявленном идентификаторе, а не на адресе электронной почты. Таким образом, лучший подход - сделать ваше Царство последовательным. Если вы можете сделать это, это лучший подход.

Также может быть хорошей идеей сохранить адрес электронной почты в таблице вашего пользователя, чтобы в случае изменения вашего царства (возможно, ваша компания была приобретена другой), вы сможете перенести свою пользователи. Но если вы планируете сделать это, вы также должны сохранить то, что было при использовании конечной точки OP во время аутентификации, когда вы получили адрес электронной почты, чтобы вы знали, можете ли вы доверять этому.

Как правило, доверять адресу электронной почты вообще небезопасно. Если вы доверяете Поставщику (в вашем случае Google), чтобы предоставить вам проверенные адреса электронной почты, то вы можете доверять адресам электронной почты , если , то вы подтверждаете, что это действительно Поставщик, который аутентифицировал пользователя. Это можно сделать только правильно, убедившись, что значение IAuthenticationResponse.Provider.Uri является тем, которому вы доверяете. Это нельзя сделать неявным образом , просто предложив кнопку «Войти в Google» из-за Функция «незапрошенных утверждений» OpenID, которая позволяет пользователям входить в систему с произвольными провайдерами независимо от того, что RP предлагает в своем пользовательском интерфейсе. И это невозможно сделать, проверив домен заявленного идентификатора из-за разницы между заявленными и локальными идентификаторами.

2 голосов
/ 29 января 2012

Я бы подтвердил, что заявленный идентификатор действительно Google, прежде чем использовать электронную почту в моем сравнении.Это , как StackOverflow это делает тоже.

...