我有一个wcf服务,它将多个操作公开为restful api。服务上的大多数操作不需要身份验证/授权,但需要一个或两个。我需要使用的授权策略超出了我的控制范围,并且运行起来非常昂贵。因此,我想避免在那些不需要它的操作上使用它。
似乎在配置中定义的授权策略必须应用于整个服务-无法将它们应用于选择性操作。这意味着我需要想出另一种机制来有选择地将授权策略应用于特定操作。
操作行为没有帮助,因为
ServiceSecurityContext.AuthorizationPolicies
集合是只读的。
把我的服务分成两份合同-授权的和未授权的-是很混乱的,而且无论如何也不会有帮助。为了配置单独的行为,我需要单独的服务(不仅仅是由一个服务实现的单独契约),这样每个服务都有一个用于配置的不同名称。单独的服务意味着指向这些服务的单独的.svc文件,所以除非我有一些疯狂的uri重写方案,否则我所有的restfulurl都将更改。这似乎比实现这一目标所需的工作多得多。
我开始认为这样做的唯一合理方法是编写自己的授权策略来包装昂贵的授权策略,并且只为select操作调用它。当然,我需要一些方法来识别这些操作,但当我遇到它时,我会跨过那座桥。
如何有选择地将授权策略应用于服务操作?
有更简单的方法吗?