我正试图让AttributeExchange或SimpleRegistration与3.2.0.9257 version of DotNetOpenAuth一起工作,撞到墙上。
以下是我所做的:
更改都在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>();
但是,这些回复始终为空。我试过谷歌,雅虎和MyOpenID。在所有情况下,身份验证都能正常运行,但不会返回SimpleRegistration或AttributeExchange数据。
我做错了什么?
答案 0 :(得分:5)
Google不支持sreg,其AX支持仅限电子邮件地址,且仅当您将电子邮件地址标记为“必需”时(您的代码使用默认的“可选”)。
雅虎不支持AX,其sreg支持仅限白名单RP。
MyOpenID支持sreg,默认情况下使用的是与DotNetOpenAuth不同的AX。在对MyOpenID使用时,你确定ClaimsResponse为null吗?因为在my tests中它可以正常工作。
您可以通过使用DotNetOpenAuth文档的Getting User Attributes下描述的AXFetchAsSregTransform行为,来发送sreg 和 AX请求以及3种不同版本的AX。