Вы близки, но немного не в своем коде. Уникальный идентификатор не response.ClaimedIdentifier.OriginalString
, а просто response.ClaimedIdentifier
. OriginalString немного отличается, и на самом деле он, вероятно, должен быть помечен internal
, чтобы избежать путаницы. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Active Only Сейчас, когда вы присваиваете ей строковую переменную, ClaimedIdentifier
имеет тип Identifier
.
Теперь о разделении учетных записей пользователей. Скорее всего, ваша проблема в том, что OpenID называет «направленной идентификацией», и именно здесь провайдер OpenID (в данном случае Google) отправляет другой OpenID для того же пользователя, в зависимости от значения для IAuthenticationRequest.Realm
свойство. Очень важно, чтобы ваш сайт удостоверился, что Realm
всегда имеет одно и то же значение, чтобы Google каждый раз распознавал ваш сайт как один и тот же, каждый раз выдавая вам один и тот же ClaimedIdentifier
для одного и того же пользователя.
Так что может быть не так? Если вы не устанавливаете значение Realm
явно, DotNetOpenAuth догадывается, что это URL вашей домашней страницы. Но это основано на URL-адресе входящего запроса. Например, если пользователи могут посетить ваш сайт, используя и http://www.yoursite.com/
и https://www.yoursite.com/
(обратите внимание на схему https на втором), тогда оба законные домашние страницы, и DotNetOpenAuth будет использовать любую схему, по которой пользователь посещает вашу страницу входа. Точно так же, если ваш сайт доступен как по http://yoursite.com
, так и http://www.yoursite.com
(обратите внимание на www), то это тоже становится двумя различными значениями области. То, что вам нужно сделать, это установить область явно, что-то вроде:
relyingParty.CreateRequest(TextBoxOpenID.Text, "https://www.yoursite.com/").RedirectToProvider();
Это гарантирует, что ваши пользователи каждый раз получают один и тот же ClaimedIdentifier.