【问题标题】:How to only allow access from WCF Data Service ServiceOperation如何只允许来自 WCF 数据服务 ServiceOperation 的访问
【发布时间】:2012-01-09 14:42:25
【问题描述】:

我将 WCF 与我的 ASP.NET MVC 应用程序一起使用,我的数据服务从我的 (EF 4.1) .mdf 文件中获取数据。但是我想通过身份验证显示一些字段,例如:

public static void InitializeService(DataServiceConfiguration config)
{
    config.SetEntitySetAccessRule("Exercies", EntitySetRights.All);
    config.SetServiceOperationAccessRule("GetAllExercies", ServiceOperationRights.All);
    config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
}
[WebGet]
public IQueryable<Exercise> GetAllExercies(string name, string pass)
{
    if (Membership.ValidateUser(name, pass))
        return CurrentDataSource.Exercies;
    else
        return CurrentDataSource.Exercies.Where(e => e.Public == true);
}

现在当用户访问 httx://localhost/MyService.svc/Exercies 时,尽管没有给他们用户名和通过,但他们可以获得所有内容。
我的临时解决方案是将 GetAllExercies 重命名为 Exercies 但我不确定是否有更好的方法...

【问题讨论】:

    标签: asp.net-mvc wcf wcf-data-services service-operations


    【解决方案1】:

    是的,有一个更好的解决方案:查询拦截器。事实上,对实体集和服务操作使用相同的名称在某些情况下往往会导致问题($metadata 对客户端来说是“令人困惑的”)。它也不是 100% 安全的(如果有的话,不会阻止通过某些导航属性访问实体)。

    看到这个http://msdn.microsoft.com/en-us/library/dd744842.aspx。这个想法是您将身份验证过滤器作为实体集查询的一部分,WCF DS 服务确保在访问实体集的任何地方都将使用它。

    【讨论】:

    • 由于拦截器不能接受参数......我只是用它来禁用实体集访问。有没有更好的解决方案?
    猜你喜欢
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2012-03-11
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多