【问题标题】:How to authenticate, filter, and verify WCF-based oData result?如何对基于 WCF 的 oData 结果进行身份验证、过滤和验证?
【发布时间】:2010-11-09 13:12:38
【问题描述】:

谁能告诉我是否可以使用我的基于 WCF 的 oData 提要执行此操作,并让我知道要搜索什么或如何开始?

1) Authenticate - 我想确保 oData 服务只能由已经使用 ASP.NET 会员系统进行身份验证的人访问

2) 过滤器 - 假设我要返回学生班级列表...我想让学生只看到他们注册的班级(基于用户名)而不是那些尚未发布的。

3) 验证 - 我不确定这是否需要,但以防一些聪明的黑客在 MSFT 的 oData 协议中发现漏洞,我想验证我的实体的结果流式传输到客户端之前的框架数据。如果存在单例 DAL,这将适用,从而产生并发问题。有关示例,请参见 this video 的 5:15。

我要做的测试是验证返回的每一行都有一个用户名列,该列等于当前会话用户名。

[编辑]
4) Encrypt - 这类似于#3,但我想在将主键发送到客户端之前对其进行模糊处理。在一种情况下,PK 是社会安全号码,我不希望它被缓存,或者以其他方式发送到下游。我还需要在 oData 写入时对此进行解密。

【问题讨论】:

  • WCF Data Services Team Blog 上有一系列讨论身份验证的博文。我没有广泛阅读它们(到目前为止有 8 个部分),但我想你可以根据这些帖子弄清楚如何完成过滤。至于 #3 - 验证,这对我来说似乎有点矫枉过正。

标签: wcf filter entity-framework-4 asp.net-membership odata


【解决方案1】:

1) 身份验证 - 正如上面的 Coding Gorilla 所提到的,WCF 数据服务博客上有一系列关于如何实现不同类型身份验证的帖子。

2) 过滤器——这正是查询拦截器的用途。例如,请参阅 MDSN 上的这篇文章 http://msdn.microsoft.com/en-us/library/dd744837.aspx

3) 验证 - 如果你认为你真的需要这个,它可能有点棘手。目前,WCF 数据服务没有可扩展点,您可以轻松插入以查看正在写出的结果。您也许可以包装 EF 返回的 IQueryable 实例并在枚举结果时进行验证,但我还没有看到这样做,所以不知道它是否可以工作。

4) 这仅在 WCF 数据服务中会很棘手。我会尝试单独在 EF 中执行此操作(但不确定是否可能)。问题是关键属性用于寻址实体,因此它们出现在 URL 和查询中。因此,您不仅需要在有效负载中解密它们,还需要在查询本身中解密它们,这将是很多工作。也许有更多 EF 经验的人会知道如何仅在 EF 中执行此操作(在这种情况下,WCF 数据服务将只看到加密的值并且一切正常)

【讨论】:

猜你喜欢
  • 2011-03-30
  • 2017-09-18
  • 1970-01-01
  • 2017-11-08
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
相关资源
最近更新 更多