【问题标题】:Preventing Cross-Domain access to services with WCF使用 WCF 防止跨域访问服务
【发布时间】:2010-08-19 18:32:41
【问题描述】:

我在一个 ASP.NET 应用程序中有几个 WCF 服务。我想阻止我域外的应用程序访问这些服务。是否有允许我阻止来自域外的请求的配置设置?

谢谢!

【问题讨论】:

    标签: wcf


    【解决方案1】:

    您想要的是身份验证。基于域限制访问不是一种安全的身份验证方式。

    【讨论】:

      【解决方案2】:

      如果您不想向 Internet 公开服务,则不应将它们托管在公共服务器上。如果你真的需要这个,你应该首先开始寻找在网络级别保护你的服务的方法。例如,我猜想 ISA 服务器应该能够阻止对您的服务的请求。

      【讨论】:

        【解决方案3】:

        编辑这将阻止所有未经身份验证的用户访问您的服务。如果您需要域中未经身份验证的用户访问服务,请告诉我,我会相应更新。

        您是否在 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兼容模式的更多信息。

        这可能不是最合适的解决方案,因为我不知道您的方案和要求。但希望这会有所帮助。

        【讨论】:

        • 嗨 D. Hoerster。事实上,我确实需要域中未经身份验证的用户才能访问这些服务。你能提供一些关于这方面的见解吗?访问服务的页面与服务在同一个域中。只是访问该页面的用户很可能不会通过身份验证。
        • 只是为了确保我理解,您希望启用http://mysite.com/dashboard.aspx 访问http://mysite.com/myservice.svc(即使对于未经身份验证的用户),但您不希望http://someothersite.com/default.aspx 访问http://mysite.com/myservice.svc .对吗?
        猜你喜欢
        • 1970-01-01
        • 2011-09-27
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        • 2011-12-03
        • 2018-12-15
        • 2011-10-05
        相关资源
        最近更新 更多