【问题标题】:How to limit access to a WCF service, by referer?如何通过引用限制对 WCF 服务的访问?
【发布时间】:2013-04-16 19:29:21
【问题描述】:

我有一个服务,我可以从页面上的 jQuery 访问,它看起来像这样:

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class FacadeService
{
    ServiceHelper serviceHelper = new ServiceHelper();

    [OperationContract]
    [WebGet(ResponseFormat=WebMessageFormat.Json)]
    public String GetAllProducts()
    {
        Uri uri = new Uri("http://localhost:12345/api/Products");

        return serviceHelper.SubmitGetRequestToService(uri);
    }
}

这很好,但现在任何人都可以打开浏览器并点击此服务。我只希望本地网站能够访问此服务。是否有任何内置方法可以做到这一点,或者我必须设计一些巧妙的方案来阻止即兴表演?

【问题讨论】:

    标签: jquery ajax wcf webget


    【解决方案1】:

    如果您在 IIS 上托管您的服务,可能最简单的方法是通过 IIS 工具限制服务 url 访问。

    如果您已经使用 wcf 服务本身执行此操作,则可以添加您的 ip 过滤行为,例如,请参阅 thisthis 帖子。

    但我仍然认为通过标准 IIS 工具来完成它会更容易。

    【讨论】:

    • 我真的是第一个遇到这种情况的人吗?我假设由于 WCF 以这种方式设置是专门针对 AJAX 调用的,它会提供某种机制来确保非 AJAX 调用者不能仅仅连接到服务并开始吸取数据。但是在 WCF 服务内部,您没有来自调用者的“上下文”,所以我认为会有一些 WCF 设置。我不可能是世界上唯一一个第一次遇到这种情况的人,对吧?! :-)
    • 我更新了答案 - 如果需要,您可以编写和使用您的行为。
    • 再次感谢。我想我不是在寻找“一种”方法来做到这一点,我正在寻找这方面的最佳实践以及如何解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2010-11-28
    • 2017-05-10
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多