Openid ASP.NET MVC 2应用程序中对DotNetOpenAuth的空请求响应

Openid ASP.NET MVC 2应用程序中对DotNetOpenAuth的空请求响应,openid,dotnetopenauth,Openid,Dotnetopenauth,我正在尝试让DotNetOpenAuth(最新版本)与ASP.NETMVC2网站一起工作。 我让第一部分工作,当用户选择OpenID提供者时调用该操作,我得到了正确的标识符,然后正确地重定向到提供者网站,我被重定向回我的网站,但问题出在这里 我请求的声明为空(请参见下面的代码) public ActionResult TryAuth(字符串openid\u标识符) { var openid=new OpenIdRelyingParty(); var response=openid.GetResp

我正在尝试让DotNetOpenAuth(最新版本)与ASP.NETMVC2网站一起工作。 我让第一部分工作,当用户选择OpenID提供者时调用该操作,我得到了正确的标识符,然后正确地重定向到提供者网站,我被重定向回我的网站,但问题出在这里

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

public ActionResult TryAuth(字符串openid\u标识符)
{
var openid=new OpenIdRelyingParty();
var response=openid.GetResponse();
如果(响应==null)
{
var req=openid.CreateRequest(openid\u标识符);
请求追加扩展(新请求)
{
Email=DemandLevel.Require,
昵称=DemandLevel.Require
});
返回req.RedirectingResponse.AsActionResult();
}
开关(响应状态)
{
案例验证状态。已验证:
{
var data=response.GetExtension(typeof(ClaimsResponse))作为ClaimsResponse;

//数据为空请查看所有类似问题

您的代码看起来很好。请确保您在web.config文件中找到了您想要的东西,以最大限度地提高您找回东西的机会。但是,由提供商为您提供任何属性。一些提供商(如Yahoo)要求您的RP正确实现RP发现,DotNetOpenAuth附带的示例RPs演示了这一点


这里是。执行此操作,然后再次尝试您测试过的站点。同时请记住,某些提供商会缓存RP发现结果,因此您可能会应用所有RP发现修复程序,并且在提供商开始向您提供数据之前仍需等待一小时或一天。

请查看所有类似问题

您的代码看起来很好。请确保您在web.config文件中找到了您想要的东西,以最大限度地提高您找回东西的机会。但是,由提供商为您提供任何属性。一些提供商(如Yahoo)要求您的RP正确实现RP发现,DotNetOpenAuth附带的示例RPs演示了这一点


这里是。执行此操作,然后再次尝试您测试过的站点。请记住,有些提供商会缓存RP发现结果,因此您可能会应用所有的RP发现修复程序,并且仍然需要等待一小时或一天,提供商才会开始向您提供数据。

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


我也有同样的问题,直到我发现对于谷歌,你必须将email字段设置为DomainLevel.Require而不是DomainLevel.Request(可选)


我尝试了三个提供商——myopenid、google和technorati,但都没有返回任何内容(我自己也不太喜欢StackOverflow的搜索功能。它需要一个+关键字功能来强制匹配)你有没有安装AXFetchAsSregTransform?我刚刚增强了我的答案,加入了一篇关于RP发现的博文。我尝试了三家提供商——myopenid、google和technorati,但都没有返回任何内容(我自己也不太喜欢StackOverflow的搜索功能。它需要+关键字功能来强制匹配)您是否已连接AXFetchAsSregTransform?刚刚增强了我的回答,在RP Discovery.DemandLevel.Require上添加了一篇博文!非常感谢!DemandLevel.Require为我做了这个把戏!非常感谢!
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");
}
fields.Email = DemandLevel.Require;