【发布时间】:2010-08-19 18:32:41
【问题描述】:
我在一个 ASP.NET 应用程序中有几个 WCF 服务。我想阻止我域外的应用程序访问这些服务。是否有允许我阻止来自域外的请求的配置设置?
谢谢!
【问题讨论】:
标签: wcf
我在一个 ASP.NET 应用程序中有几个 WCF 服务。我想阻止我域外的应用程序访问这些服务。是否有允许我阻止来自域外的请求的配置设置?
谢谢!
【问题讨论】:
标签: wcf
您想要的是身份验证。基于域限制访问不是一种安全的身份验证方式。
【讨论】:
如果您不想向 Internet 公开服务,则不应将它们托管在公共服务器上。如果你真的需要这个,你应该首先开始寻找在网络级别保护你的服务的方法。例如,我猜想 ISA 服务器应该能够阻止对您的服务的请求。
【讨论】:
编辑:这将阻止所有未经身份验证的用户访问您的服务。如果您需要域中未经身份验证的用户访问服务,请告诉我,我会相应更新。
您是否在 ASP.NET 应用程序中使用身份验证?
<system.web>
...
<authentication mode="Forms">
<forms protection="All" defaultUrl="login.aspx" ... />
</authentication>
...
</system.web>
如果是这样,在您的用户进行身份验证之前,您的 .svc 文件将无法访问。如果未经身份验证的用户尝试访问 .svc 文件,他们将被重定向到您的登录页面。
编辑(2): 由于您需要对站点内的服务进行未经身份验证的访问,您可以考虑的一件事是在第一次访问该站点时将 cookie 发送到用户的计算机。 cookie 可以使用创建日期和一些密钥来创建散列,您可以在服务器上为每个请求验证散列。来自其他站点的请求不会传递 cookie,您的服务将手动检查该 cookie 是否存在 - 如果不存在,则请求被拒绝。
如果您的 WCF 服务启用了 ASP.NET 兼容性 (true) 并且 AspNetCompatibilityRequirementsMode 设置为允许或必需,则您应该可以访问 HttpContext 和 cookie。 Here关于ASP.NET兼容模式的更多信息。
这可能不是最合适的解决方案,因为我不知道您的方案和要求。但希望这会有所帮助。
【讨论】:
http://mysite.com/dashboard.aspx 访问http://mysite.com/myservice.svc(即使对于未经身份验证的用户),但您不希望http://someothersite.com/default.aspx 访问http://mysite.com/myservice.svc .对吗?