【发布时间】:2014-07-31 15:30:44
【问题描述】:
我的任务是为现有/旧版 wcf 服务制定授权策略。目前系统中没有授权。基于 Basichttp 的自定义绑定用于处理安全性。 (客户端以加密形式发送用户名/密码,在服务器端,在收到请求后执行数据库检查。此时会在服务器内存中生成一个可过期的令牌并将其放入服务器内存以进行进一步的安全检查)故事的道德,一切以自定义方式实现(未使用 STS、证书等框架的安全特性) 在服务层中,不根据客户端身份进行身份验证检查。理论上,每个客户端只要有一个有效的用户名/密码对,就可以执行每一个操作。
正如我所说,我的任务是在这个遗留系统上实施授权策略。
我对 wcf 比较陌生,我的感觉是身份验证和授权在 wcf 中非常紧密地结合在一起。
似乎有多种选择(http://msdn.microsoft.com/en-us/library/ff648151.aspx),例如:
*使用 ASP.NET 角色管理器进行角色授权,
*使用 SQL Server 角色提供程序进行角色授权, 等等。
我觉得自定义授权策略对我来说是最合适的选择,但自定义示例 http://msdn.microsoft.com/en-us/library/ms731774(v=vs.110).aspx 似乎也将身份验证策略与授权策略混合在一起。在没有任何特殊身份验证策略的情况下,我找不到实现自定义授权的有效示例。您可以猜到,在当前的遗留系统中,安全性是以自定义方式处理的,我无法更改,即我不能使用任何 ws-* 绑定。
我认为可能的解决方案是:
1) 创建一个实现 ParameterInspector 或 MessageInspector 的自定义属性
2) 用这个新的自定义属性装饰所有现有的操作合同
3) 在 BeforeCall 或 AfterReceiveRequest 方法中,应用自定义身份验证逻辑(此自定义逻辑很可能会将用户与角色相关联,并将角色与允许的操作相关联)。
通过抛出异常并在客户端适当地显示消息来拒绝请求。
我的问题是,这种方法有多优雅?考虑到遗留系统的其他限制,还有更优雅的选择吗?我是否遗漏了某些部分,或者 wcf 中的身份验证和授权真的非常紧密耦合?
【问题讨论】:
-
除了这应该在 CodeReview 上而不是 SO 上,听起来你可以控制它。给予或接受它我会怎么做。研究得很好。
标签: c# .net wcf authentication authorization