ASP.NET MVC 2应用程序中使用DotNetOpenAuth的null ClaimsResponse

时间:2010-08-27 07:06:51

标签: openid dotnetopenauth

我正在尝试使用DotNetOpenAuth(最新版本)来使用ASP.NET MVC 2网站。 我得到第一部分工作,当用户选择OpenID提供程序时调用操作,我得到正确的标识符传入,然后我被正确地重定向到提供者网站,我被重定向回我的网站,但这是问题。

我请求的声明为空(请参阅下面的代码)。

public ActionResult TryAuth(string openid_identifier)
{
    var openid = new OpenIdRelyingParty();
    var response = openid.GetResponse();
    if(response== null)
    {
        var req = openid.CreateRequest(openid_identifier);
        req.AddExtension(new ClaimsRequest
                            {
                                Email = DemandLevel.Require,
                                Nickname = DemandLevel.Require
                            });
        return req.RedirectingResponse.AsActionResult();
    }
    switch(response.Status)
    {
        case AuthenticationStatus.Authenticated:
            {
                var data = response.GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
                // data is null <-----------------------------------------
                return View("Index");
            }
    }
    return View("Index");
}

如果有人能指出我正在做的(不是那么)明显的错误,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

我遇到了同样的问题,直到我发现对于Google,您必须将电子邮件字段设置为DomainLevel.Require而不是DomainLevel.Request(可选)

fields.Email = DemandLevel.Require;

答案 1 :(得分:3)

请仔细阅读所有类似的问题。Refer this

您的代码看起来很好。请确保您在web.config文件中activate the AXFetchAsSregTransform,以最大限度地提高您获取回复的机会。然而,由提供商为您提供任何属性。像雅虎这样的一些提供商要求你的RP正确实现RP Discovery,DotNetOpenAuth附带的示例RP就是这样。

这是my blog post on getting RP Discovery done right。这样做,并尝试再次测试的网站。请记住,某些提供商会缓存RP Discovery结果,因此您可能会应用所有RP Discovery修复程序,但仍需等待一小时或一天,然后提供商才会开始向您提供数据。