2

背景(这可能已经从我迄今为止提出的关于 DNOA 的众多问题中显而易见):我正在开发一个在我雇主的 Intranet 中运行的 Web 应用程序门户。但是,由于这是一个 Intranet,所有各种依赖方(和提供者)都有如下所示的 url http://servername/path:尤其是缺少一个顶级域名。

DotNetOpenAuth ( UntrustedWebRequestHandler.IsUriAllowable(Uri uri)) 中的代码执行以下检查:

if (!uri.Host.Contains(".")) {
    return failsUnlessWhitelisted("it does not contain a period in the host name.");
}

显然,由于我所有的 RP 只是没有 TLD 的服务器名称,因此它们都未通过此检查。现在,我意识到我可以将它们全部添加到 web.config 白名单中(我已经尝试了一些并且它按预期工作),但是看到新服务器将被动态添加,我不认为这是一个理想的解决方案。

所以我的问题是:我应该尝试动态修改 web.config 吗?(我对此进行的初步研究表明这会很痛苦)或者,有没有办法以编程方式设置白名单?

4

1 回答 1

1

不幸的是,没有编程方式来修改主机白名单。

如果您处于受信任的环境中,则可以绕过UntrustedWebRequestHandler该类并使用不包括主机名检查(或检查它是否与您需要的任何策略匹配)的 Web 请求处理程序。如果您信任您将要求 DotNetOpenAuth 连接到的所有服务器,建议您使用内置DotNetOpenAuth.Messaging.StandardWebRequestHandler的直接传递(不添加任何额外的网络级安全检查)。

var rp = new OpenIdRelyingParty();
rp.Channel.WebRequestHandler = new StandardWebRequestHandler();

var op = new OpenIdProvider();
op.Channel.WebRequestHandler = new StandardWebRequestHandler();

如果你想应用一些更谨慎的策略(也许有一些集中的白名单主机列表),你可以IDirectWebRequestHandler自己实现,如果需要,你可以使用现有的UntrustedWebRequestHandler类来获得灵感。然后当然将上述属性设置为您自己的实现。

于 2012-11-25T01:27:39.180 回答