【问题标题】:No OpenID endpoint found未找到 OpenID 端点
【发布时间】:2010-03-26 00:48:54
【问题描述】:

我正在尝试使用 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 中运行相同的页面,我会得到以下信息:

登录失败:此消息已被处理。这可能表明正在进行重放攻击。

【问题讨论】:

  • 您的问题包括“在 FireFix 上运行时出现以下错误”。火狐?而你遗漏了你得到的错误。

标签: c# openid dotnetopenauth


【解决方案1】:

您调用GetResponse() 两次导致重放攻击检测。你不能那样做。相反,只需将一次调用 GetResponse() 的结果分配给一个局部变量,然后检查它是否为 null 并在其他情况下使用它。

关于“未找到 OpenID 端点”错误,您是否也在针对本地主机 OpenID 或由雅虎等外部方托管的 OpenID 进行测试?

【讨论】:

【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      检查客户端应用程序中的 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" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多