我正在研究使用WCF内置功能来帮助我实现位于WCF之上的授权服务。我已经有了表格,如:
User
,Role
,Permission
(我还有复合实体:UserRole
和RolePermission
)。
Permission
个对象具有bool CanRead
,bool CanWrite
等自定义属性。角色可以包含许多权限。
这如何与WCF现有的授权框架相关联?我想尽量不要重新发明轮子。我如何使用自己的权限?我可以看到角色如何从.NET示例中运行,而不是我自己的自定义Permission
实体。有什么提示让我开始朝着正确的方向前进吗?
答案 0 :(得分:8)
This article提供了正常执行此操作的基本概述。基本上,您构造一个自定义主体,其中包含与IAuthorizationPolicy
中用户权限相关的数据,并将自定义主体附加到WCF OperationContext
。这保证了无论管理线程如何,您始终可以通过Thread.CurrentPrincipal
访问此主体。
如果您的权限仅基于角色成员身份,则只需使用PrincipalPermission.Demand()
等标准机制或使用PrincipalPermissionAttribute
包装您的操作即可。
或者,如果您具有更复杂的权限(例如,创建|删除|更新等),则一种方法是创建实现IPermission
的自定义权限。这种方法也适用于基于价值的权限(例如批准高达500美元的订单)。然后,在您的代码中,您可以构造所需的权限,并让它调用Demand()
来检查您当前的自定义主体是否被允许。如果可以使这些权限可序列化,那么创建一个随播属性以支持使用每个权限的声明性安全性通常也是有意义的。
上述方法很好地与WCF和.NET安全基础架构集成,一旦您了解IPermission
,就可以提供优雅且可维护的解决方案。