Запросить адрес электронной почты у провайдера OpenID - PullRequest
6 голосов
/ 27 февраля 2009

Я внедряю OpenID, и я хотел бы получить адрес электронной почты пользователя и другую информацию о пользователе, я делаю это:

var fetch = new FetchRequest();
fetch.AddAttribute(new AttributeRequest(WellKnownAttributes.Contact.Email));
request.AddExtension(fetch);

Но провайдер ничего не возвращает. Я использую DotNetOpenID

Что я делаю не так?

спасибо!

EDIT:

Когда я пытаюсь зарегистрироваться на http://www.plaxo.com/, используя MyOpenID или Google, они оба говорят, что plaxo запрашивает дополнительную информацию, но когда я проверяю свой сайт, они ничего не говорят ...

Ответы [ 2 ]

6 голосов
/ 04 марта 2009

Как сказал Мартин, это зависит от Поставщика.

Я думаю, что MyOpenID не выполняет AttributeExchange. Однако они выполняют sreg (простую регистрацию), поэтому добавьте расширение ClaimsRequest к вашему запросу, и вы получите ClaimsResponse назад от некоторых провайдеров.

Google выполняет только AttributeExchange и предоставляет только адрес электронной почты. Единственное, что вам не хватает в вашем коде, - это то, что Google также даже не публикует адрес электронной почты, если вы не отметите его как «Обязательный» в своем запросе. Добавьте «истинный» второй параметр в конструктор AttributeRequest, и тогда Google должен загореться и дать вам адрес электронной почты пользователя.

Вот некоторые документы и примеры получения атрибутов .

1 голос
/ 27 февраля 2009

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

http://blog.nerdbank.net/2008/07/how-to-use-dotnetopenid-attribute.html «Как и для всех расширений OpenID, простая отправка запроса с расширением в нем не гарантирует, что провайдер отправит ответ на это расширение обратно. Провайдер может не поддерживать это расширение или может не отправлять ответ». 1005 *

...