c# - 避免 dotnetopenauth url 中的 "must contain period"限制

标签 c# .net openid dotnetopenauth

背景(从迄今为止我问过的关于 DNOA 的大量问题中可能已经很明显):我正在开发一个在我雇主的内部网上运行的 Web 应用程序门户。然而,由于这是一个内部网,所有不同的依赖方(和提供者)都有这样的 url:http://servername/path;特别是缺少 TLD。

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 吗? (我对此所做的初步研究表明这会很痛苦) 或者,有什么方法可以编程设置白名单吗?

最佳答案

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

如果您处于受信任的环境中,您可以绕过 UntrustedWebRequestHandler 类并使用不包括主机名检查(或检查它是否与您需要的任何策略匹配)的 Web 请求处理程序.如果您信任所有您将要求 DotNetOpenAuth 连接的服务器。

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

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

如果你想应用一些更谨慎的策略(也许有一些集中的白名单主机列表),你可以自己实现IDirectWebRequestHandler,你可以使用the existing UntrustedWebRequestHandler class for inspiration if necessary .然后当然将以上属性设置为您自己的实现。

关于c# - 避免 dotnetopenauth url 中的 "must contain period"限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13535398/

相关文章:

c# - MongoCursor<BsonDocument> 转换为 List 非常慢

c# - 在兼容的枚举之间直接转换有多大风险?

c# - 在 .NET c# 中制作 MSSQL 驱动的日历

facebook - 使用 Azure ACS 时如何注销 Facebook?

c# - 成功登录后身份服务器不重定向

c# - WPF 中的 SQL Server 连接

c# - 强制Windows在关闭时等待服务停止

c# multithreading发送3个不同的线程

c# - 绑定(bind)ContentPresenter的内容

android - Android 中的 Oauth2 刷新 token 更新