【问题标题】:OpenID provider on localhost with DotNetOpenAuth本地主机上的 OpenID 提供程序与 DotNetOpenAuth
【发布时间】:2009-12-04 06:28:35
【问题描述】:

我在本地运行 DotNetOpenAuth 示例提供程序,它似乎可以通过 Web 浏览器正确处理请求。我可以在调试器中单步执行处理程序以进行授权。

我有一个项目可以通过 Google 和其他提供者进行身份验证,但在示例提供者中失败。示例提供者根本看不到请求,依赖方抛出异常,抱怨 No OpenID endpoint found.

假设我在依赖方执行以下操作:

string providerURL = "http://localhost/openid/provider";

// Now try the openid relying party...
var openid = new OpenIdRelyingParty();
var response = openid.GetResponse();
if (response == null)
{
    Identifier id;
    if (Identifier.TryParse(providerURL, out id))
    {
        // The following line throws the exception without ever making
        // a request to the server.
        var req = openid.CreateRequest(providerURL);
        // Would redirect here...
    }
 }

我注意到UntrustedWebRequestHandler 类阻止连接到主机名,例如localhost,但是根据测试用例或手动将其添加为白名单主机,似乎没有帮助。

我已经检查了主机是否可以通过以下方式访问:

// Check to make sure the provider URL is reachable.
// These requests are handled by the provider.
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(providerURL);
HttpWebResponse httpRes = (HttpWebResponse)request.GetResponse();

想法?我不知道为什么它根本不提出请求。

编辑:localhost 像这样被列入白名单:

(openid.Channel.WebRequestHandler as UntrustedWebRequestHandler).WhitelistHosts.Add("localhost");

我也尝试通过将其添加到 web.config 来将其列入白名单,如下所示:

<dotNetOpenAuth>
    <messaging>
        <untrustedWebRequest>
            <whitelistHosts>
                <add name="localhost"/>
            </whitelistHosts>
        </untrustedWebRequest>
    </messaging>
</dotNetOpenAuth>

无论使用哪种方法,在调试器中检查时,localhost 都会显示在UntrustedWebRequestHandler 的白名单主机列表中。他们的提供者仍然没有收到任何请求。

【问题讨论】:

  • 您所做的手动WebRequest.Create 测试是从您的网络应用程序还是控制台应用程序调用的?

标签: .net asp.net openid dotnetopenauth


【解决方案1】:

您似乎已经意识到需要将 RP 的 localhost 列入白名单才能使其正常工作。但我最近意识到的另一件事是 IIS 阻止 ASP.NET Web 应用程序对其自身执行 HTTP GET。它适用于 Visual Studio Personal Web Server,但如果您的 RP 和 OP 都托管在 localhost 下的 IIS 上,那么很可能是 IIS 阻止了它。您可以使用 IIS 托管的 RP 与控制台应用程序中的手写 HttpWebRequest 测试来确认或否认这一点。

如果它们都在 IIS 下并且这就是问题所在,那么您应该使用 Personal Web Server 进行开发,或者将 IIS 上的两个站点分隔在不同的应用程序池中或类似的东西会有所帮助。

【讨论】:

  • 它们还没有在 IIS 上,但如果它们可以工作,它们将被部署到它。目前的问题只是能够测试他们是否一起工作。
  • 你知道这是否适用于 IIS Express 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多