我正在根据示例使用DotNetOpenAuth
开发提供程序。我正在试验白名单/黑名单依赖方。它似乎忽略了列入黑名单的主机并允许依赖方。我已经验证UntrustedWebRequestHandler
正在从配置文件中加载黑名单主机。这是我的配置部分。
<dotNetOpenAuth>
<messaging>
<untrustedWebRequest>
<blacklistHosts>
<add name="localhost" />
</blacklistHosts>
</untrustedWebRequest>
</messaging>
</dotNetOpenAuth>
我还注意到OpenIdWebRingSsoProvider
手动实现了白名单,而不是依赖于UntrustedWebRequestHandler
。 UntrustedWebRequestHandler
仅作为依赖方操作时是否仅处理白名单和黑名单?如果没有,我做错了什么?
答案 0 :(得分:0)
Web配置的untrustedWebRequest部分仅根据请求的主机或IP地址限制出站 HTTP请求。这就是为什么在OpenID提供商上设置它并不(必然)阻止依赖方,因为提供商不必严格必须向依赖方发送请求。此.config部分主要是为了保护您免受故意尝试DoS攻击您的服务器的邪恶Internet服务器。例如,如果您正在编写RP,由于OpenID可以由用户直接输入,他们可以进入一个只接受HTTP请求的主机,让他们在那里挂起而不响应或关闭连接。足够的那些和你的服务器将耗尽资源。如果您发现有一些服务器正在为您执行此操作,则可以将它们列入黑名单。
如果您确实想要控制连接到哪些服务(依赖方或提供商),则不应使用上述方法。正如您在OpenIdWebRingSsoProvider示例中看到的那样,您应该使用IAuthenticationRequest.Realm
(如果您是提供者)或IAuthenticationRequest.Provider.Uri
(如果您是依赖方)自行过滤这些内容。当然,还有其他方法可以过滤。如果您的组织中有一个大型SSO Web环,您可能希望过滤远程服务上的某些可发现证书,而不是整个环中的硬编码URL。