微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.net – 使用DotNetOpenAuth的localhost上的OpenID提供程序

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

我有一个项目可以与谷歌和其他提供商进行身份验证,但与样本提供商失败.样本提供程序根本看不到请求,依赖方抛出异常,抱怨找不到OpenID端点.

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

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

解决方法

看起来您已经意识到需要将本地主机列入白名单以使其正常工作.但是我最近意识到的另一件事是IIS阻止ASP.NET Web应用程序自己执行HTTP GET.它适用于Visual Studio Personal Web Server,但如果您的RP和OP都托管在localhost下的IIS上,那么可能是它阻止了它的IIS.您可以通过使用IIS托管的RP与控制台应用程序中的手写HttpWebRequest测试来确认或拒绝此操作.

如果它们都在IIS下,那就是问题所在,那么您应该使用Personal Web Server进行开发,或者将IIS中的两个站点分离到不同的应用程序池中,或者这样做会有所帮助.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐