找不到OpenID端点

时间:2010-03-26 00:48:55

标签: c# openid dotnetopenauth

我正在尝试使用DotNetOpenId库在测试网站上添加OpenID支持。出于某种原因,它在Firefox上运行时一直给我以下错误。请记住,我正在使用localhost,因为我正在本地计算机上测试它。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy;
using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration;
using DotNetOpenAuth.OpenId.RelyingParty;

namespace TableSorterDemo
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var openid = new OpenIdRelyingParty();
            if (openid.GetResponse() != null)
            {
                switch (openid.GetResponse().Status)
                {
                    case AuthenticationStatus.Authenticated:
                        var fetch = openid.GetResponse().GetExtension(typeof(ClaimsResponse)) as ClaimsResponse;
                        var nick = fetch.Nickname;
                        var email = fetch.Email;

                        break;
                }
            }
        }

        protected void OpenIdLogin1_LoggedIn(object sender, OpenIdEventArgs e)
        {
            var openid = new OpenIdRelyingParty(); 
            if(openid.GetResponse() != null)
            {
                switch(openid.GetResponse().Status)
                {
                    case AuthenticationStatus.Authenticated:
                        var fetch = openid.GetResponse().GetExtension(typeof (ClaimsResponse)) as ClaimsResponse;
                        var nick = fetch.Nickname;
                        var email = fetch.Email; 

                        break; 
                }
            }


        }

        protected void OpenIdLogin1_LoggingIn(object sender, OpenIdEventArgs e)
        {
            var openid = new OpenIdRelyingParty();
            var req = openid.CreateRequest(OpenIdLogin1.Text);
            var fetch = new ClaimsRequest();
            fetch.Email = DemandLevel.Require;
            fetch.Nickname = DemandLevel.Require; 
            req.AddExtension(fetch);
            req.RedirectToProvider();
            return; 
        }


    }
}

此外,如果我在Chrome中运行相同的页面,那么我会得到以下内容:

登录失败:此邮件已被处理。这可能表示正在进行重播攻击。

4 个答案:

答案 0 :(得分:5)

重播攻击检测会导致您两次调用GetResponse()。你不能这样做。相反,只将一个调用的结果分配给GetResponse()到局部变量,然后将其与null一起检查并以其他方式使用它。

关于您“没有找到OpenID端点”错误,您是在测试本地主机OpenID还是由雅虎这样的外部主机托管的OpenID?

答案 1 :(得分:4)

在我的情况下,因为我使用代理连接到互联网,我通过将以下配置添加到web.config来解决。

<system.net>
 <defaultProxy useDefaultCredentials="true">
  <proxy autoDetect="True" usesystemdefault="True" />
 </defaultProxy>
</system.net>

答案 2 :(得分:0)

值得注意的是,“找不到OpenID端点”错误消息可能不是对问题的真实描述。

对我来说,这是因为我使用的是我的Gmail电子邮件地址,但实际上您需要创建OpenId account,然后您将获得格式为.myopenid.com /

的ID

在表单中输入该ID,它应该可以正常工作。

答案 3 :(得分:0)

检查客户端应用中的web.config。 有一节

                    <!-- Uncomment to enable communication with localhost (should generally not activate in production!) -->
                <!--<add name="localhost" />-->

So as it says - uncomment to
<add name="localhost" />