2010-04-12 31 views
0

我有一个WCF服务,其中包含多个暴露为RESTful API的操作。服务上的大多数操作不需要认证/授权,但是只有一个或两个操作。我需要使用的授权策略超出了我的控制范围,运行起来很昂贵。因此,我想避免在不需要它的操作上使用它。选择性地将授权策略应用于操作

似乎在配置中定义的授权策略必须适用于整个服务 - 无法将它们应用于选择性操作。这意味着我需要提出另一种机制来选择性地将授权策略应用于特定的操作。

操作行为不起作用,因为ServiceSecurityContext.AuthorizationPolicies集合是只读的。

将我的服务拆分为两个合同 - 授权和未授权 - 很混乱,反正也无济于事。为了配置单独的行为,我需要单独的服务(不仅仅是由一个服务实现的单独的协定),以便每个服务都有一个用于配置的独特名称。单独的服务意味着单独的.svc文件指向这些服务,所以我的所有RESTful URL都会改变,除非我有一些疯狂的URI重写方案。这似乎比完成这一任务所需的工作要多得多。

我开始认为唯一合理的方法是编写我自己的授权策略来包装昂贵的授权策略,并且只为选择操作调用它。当然,我需要一些方法来识别这些操作,但是当我来找它的时候我会穿过那座桥。

如何选择性地将授权策略应用于服务操作?有没有更简单的方法?

回答

1

由于没有人回复,我会说没有办法做到这一点,所以我可以标记为接受。我最终做了我所说的 - 写一个包装授权策略,根据某些配置有选择地调用昂贵的授权策略。