如何让AttributeExchange和/或SimpleRegistration与MVC一起使用?

时间:2009-09-14 18:32:07

标签: asp.net-mvc openid dotnetopenauth

我正试图让AttributeExchangeSimpleRegistration3.2.0.9257 version of DotNetOpenAuth一起工作,撞到墙上。

以下是我所做的:

  1. 从GitHub下载3.2.0.9257标记
  2. 打开DotNetOpenAuth视觉工作室解决方案
  3. 对OpenIdRelyingPartyMvc示例进行了更改
  4. 更改都在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数据。

    我做错了什么?

1 个答案:

答案 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。