2

我正试图让AttributeExchangeSimpleRegistration3.2.0.9257 版本的 DotNetOpenAuth 一起工作。

这是我所做的:

  1. 从 GitHub 下载 3.2.0.9257 标签
  2. 打开 DotNetOpenAuth 视觉工作室解决方案
  3. 对 OpenIdRelyingPartyMvc 示例进行了更改

更改都在 UserController 的 Authenticate 方法中。

我替换了第 44 行,

return openid.CreateRequest(Request.Form["openid_identifier"]).RedirectingResponse.AsActionResult();

具有以下内容:

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

// Add SimpleRegistration requests for Email and FullName
var sr = new ClaimsRequest();
sr.Email = DemandLevel.Request;
sr.FullName = DemandLevel.Request;
request.AddExtension(sr);

// Add AttributeExchange requests for Email and FullName
var ax = new FetchRequest();
ax.Attributes.Add(new AttributeRequest(WellKnownAttributes.Contact.Email));
ax.Attributes.Add(new AttributeRequest(WellKnownAttributes.Name.FullName));
request.AddExtension(ax);

return request.RedirectingResponse.AsActionResult();

(我还添加了 DotNetOpenAuth.OpenId.Extensions.AttributeExchange 和 DotNetOpenAuth.OpenId.Extensions.SimpleRegistration 命名空间。)

然后,以同样的方法,在“第 3 阶段认证”之后,我尝试得到响应:

var sr = response.GetExtension<ClaimsResponse>();
var ax = response.GetExtension<FetchResponse>();

但是,这些响应始终为空。我试过 Google、Yahoo 和 MyOpenID。在所有情况下,身份验证都能正常工作,但不会返回 SimpleRegistration 或 AttributeExchange 数据。

我究竟做错了什么?

4

1 回答 1

5

Google 不支持 sreg,其 AX 支持仅限电子邮件地址,并且仅当您将电子邮件地址标记为“必需”时(您的代码使用默认的“可选”)。

Yahoo 不支持 AX,它的 sreg 支持只是一个列入白名单的 RP。

MyOpenID 支持 sreg,并且默认使用的 AX 种类与 DotNetOpenAuth 不同。当针对 MyOpenID 使用时,您确定 ClaimsResponse 为空吗?因为在我的测试中它工作正常。

只需使用 DotNetOpenAuth 文档的获取用户属性中描述的 AXFetchAsSregTransform 行为,您就可以避免发送 sregAX 请求以及 3 种不同风格的 AX 。

于 2009-09-15T23:32:08.923 回答