我在本地运行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
列入白名单的主机列表中。他们的提供者仍然没有收到任何请求。
答案 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中的两个站点分离到不同的应用程序池中,或者这样做会有所帮助。