6

我正在实现 OpenID,我想检索用户的电子邮件地址和有关用户的其他信息,我正在这样做:

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

但是提供者不返回任何东西。我正在使用 DotNetOpenID

我究竟做错了什么?

谢谢!

编辑:

当我尝试使用 MyOpenID 或 Google 在http://www.plaxo.com/上注册时,他们都说 plaxo 正在请求更多信息,但是当我测试我的网站时,他们什么也没说……

4

2 回答 2

6

正如马丁所说,这取决于提供者。

我认为,MyOpenID 不执行 AttributeExchange。不过,他们会进行 sreg(简单注册),因此ClaimsRequest请在您的请求中添加扩展名,您会ClaimsResponse从一些提供商那里得到回复。

Google 只做 AttributeExchange,并且只提供一个电子邮件地址。您的代码中唯一缺少的是,除非您在请求中将其标记为“必需”,否则 Google 甚至不会自愿提供电子邮件地址。向 AttributeRequest 构造函数添加一个 ", true" 第二个参数,然后 Google 应该会亮起并为您提供用户的电子邮件地址。

以下是一些获取属性的文档和示例

于 2009-03-04T20:43:46.270 回答
1

也许您没有做错任何事情——提供商可能只是不支持该请求,或者选择不发送请求的信息。

http://blog.nerdbank.net/2008/07/how-to-use-dotnetopenid-attribute.html “与所有 OpenID 扩展一样,仅发送带有扩展名的请求并不能保证提供者将发送响应该扩展。提供者可能不支持该扩展,或者可能选择不发送任何响应。“

于 2009-02-27T12:36:14.253 回答