2009-09-07 2 views
4

Я использую DotNetOpenAuth для входа в систему как часть моего процесса входа в систему. Он отлично работает для обработки подлинности, но процесс извлечения информации пользователя от различных поставщиков openId работает не очень хорошо.Извлечь информацию о пользователях OpenId среди поставщиков

Использование MyOpenId Я получаю полную информацию, которую я запрашиваю, используя RequestsRequest с DotNetOpenAuth. По-видимому, он использует протокол SREG для запроса и получения этого содержимого. Это отлично работает с MyOpenId, но ничего не делает для Google или Yahoo и других поставщиков, которые не поддерживают этот протокол (пока?).

Есть ли способ получить информацию о пользователях перекрестного провайдера, используя DotNetOpenAuth (или какой-либо другой механизм, отличный от RPX (не ищет другого человека посередине: -}))?

+0

Я не думаю, что есть протокол «SIG». Есть SREG (простая регистрация) и AX (обмен атрибутами). –

+0

Извините, значит SREG: -}. Обновленный вопрос. –

ответ

2

Я рекомендую вам взглянуть на фактические обмены, которые происходят. То есть когда ваша служба перенаправляет пользователя к провайдеру, выясняет, какие параметры отправляются, а затем, когда пользователь возвращается, также узнайте, какие параметры передаются.

В OpenID 2 существует два способа запроса информации о пользователе: обмен атрибутами (AX) и простая регистрация (SREG). Не знаете, что такое SIG. Независимо от того, внедряют ли поставщики эти протоколы и какую информацию они предоставляют, это их выбор (сначала, а затем, надеюсь, и выбор пользователя).

Я обнаружил, что Google поддерживает AX и всегда предоставляет адрес электронной почты, а иногда и имя пользователя и фамилию пользователя. По моему опыту, Yahoo не предоставляет ничего, кроме заявленного идентификатора. Как следствие, я не принимаю Yahoo в качестве поставщика, см http://pypi.python.org/pypi?:action=openid

+0

Спасибо. Полезно знать, что Google использует AX. Теперь просто выясняем, как получить значения (если они даже возвращаются). Посмотрел данные запроса. При использовании ClaimsRequest создается запрос SREG, который, по-видимому, ничего не делает. Возвращается много закодированных материалов, но нет данных. Значения SREG являются обычным текстом, когда они возвращаются из MyOpenId, и это даже было бы легко проанализировать вручную. Google ничего не возвращает, хотя выглядит синтаксически. –

0

Проверьте мой ответ на очень похожий вопрос здесь:

Cannot get attributes from DotNetOpenId response

Сложение: Вот блоге я написал по этому вопросу. Обратите внимание, что я написал это до того, как я написал поведение AXFetchAsSregTransform, поэтому некоторые из них легче, чем представлены в сообщении в блоге. Но, в частности, в нем упоминается, что Google игнорирует все запросы атрибутов, которые являются «необязательными». Таким образом, вы должны сделать электронную почту «обязательной», чтобы ее получить.

http://blog.nerdbank.net/2009/03/how-to-pretty-much-guarantee-that-you.html

+0

Эндрю, это болезненный раздел конфигурации: -}. Попробуйте это, как есть, не получилось, чтобы это сработало - он взорвался с ошибкой конфигурации на настройке xri proxy в config (ссылка на нулевой объект). –

+0

Чувак, не помещайте в * весь раздел конфигурации, который парень задал в его вопросе. Прокрутите вниз до моего ответа и поставьте только эту очень маленькую часть. (с необходимыми внешними тегами). Парень, который задал вопрос, неверно истолковал страницу ссылки на конфигурацию, я думаю, и думал, что все это обязательно. Конечно нет. Это просто всеобъемлющая ссылка. –

+0

Andrew я использовал раздел конфигурации со страницы вики здесь (а не отправил код в вопросе): http://dotnetopenauth.net:8000/wiki/CodeSnippets/Configuration Я понятия не имею, что требуется от что и что необязательно и каковы зависимости. : -} я нашел то, что нужно здесь: http://dotnetopenauth.net:8000/wiki/CodeSnippets/OpenIDRP/AXFetchAsSregTransform и это, кажется, работает несколько лучше. Например, я могу получить адрес электронной почты от Google, но ничего больше. Кто-нибудь выполнил получение электронной почты и полного имени (или псевдонима) из Google? –

1

Для уточнения я отправляю эту ссылку в качестве ответа:

http://www.dotnetopenauth.net/developers/code-snippets/the-axfetchassregtransform-behavior/

Эта ссылка обеспечивает настройки файла конфигурации поведения AXFetchAsSregTransform в небольшой пример конфигурации (как упомянуто Эндрю) который позволяет использовать ClaimsRequest() для получения информации SREG и AX.

Это позволяет получить информацию о некоторых (но не все) запросах. Для Google он работает с поиском по электронной почте как минимум.

Чтобы сделать запрос:

var req = openid.CreateRequest(Request.Form["openid_identifier"]); 

var fields = new ClaimsRequest();      
fields.Email = DemandLevel.Require; 
fields.FullName = DemandLevel.Require; 

req.AddExtension(fields); 

return req.RedirectingResponse.AsActionResult(); 

получить ответ:

var claim = response.GetExtension<ClaimsResponse>(); 
string email = null, fullname= null, password = null; 
if (claim != null) 
{ 
    email = claim.Email; 
    fullname = claim.FullName; 
} 

Обратите внимание, что Google, кажется, только чтобы забрать адрес электронной почты и он нуждается DemandLevel.Require, в противном случае ничто не возвращается ,

Смежные вопросы