使用DotNetOpenAuth的localhost上的OpenID提供程序

时间:2009-12-04 06:28:35

标签: .net asp.net openid dotnetopenauth

我在本地运行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列入白名单的主机列表中。他们的提供者仍然没有收到任何请求。

1 个答案:

答案 0 :(得分:4)

看起来您已经意识到需要将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中的两个站点分离到不同的应用程序池中,或者这样做会有所帮助。