如何在WCF中使用自己的权限?

我正在研究使用WCF内置function来帮助我实现位于WCF之上的授权服务。 我已经有了以下表格:

UserRolePermission (我也有复合实体: UserRoleRolePermission )。

Permission对象具有自定义属性,如bool CanReadbool CanWrite 。 角色可以包含许多权限。

这如何与WCF现有的授权框架相结合? 我想尽量不要重新发明轮子。 我如何使用自己的权限? 我可以看到角色如何从.NET示例中工作,而不是我自己的自定义Permission实体。 有什么提示让我开始朝着正确的方向前进?

本文简要介绍了执行此操作的常规方法。 基本上,您构造一个自定义主体,其中包含与IAuthorizationPolicy用户权限相关的数据,并将自定义主体附加到WCF OperationContext 。 这保证了无论如何管理线程,您始终可以通过Thread.CurrentPrincipal访问此主体。

如果您的权限仅基于角色成员身份,则可以使用PrincipalPermission.Demand()等标准机制或使用PrincipalPermissionAttribute包装操作。

或者,如果您具有更复杂的权限(例如,创建|删除|更新等),则一种方法是创建实现IPermission的自定义权限。 这种方法也适用于基于价值的权限(例如批准高达500美元的订单)。 然后,在您的代码中,您可以构造所需的权限,并让它调用Demand()来检查您当前的自定义主体是否被允许。 如果可以使这些权限可序列化,那么创建一个companion属性以支持使用每个权限的声明性安全性通常也是有意义的。

上述方法可以很好地与WCF和.NET安全基础架构集成,一旦您了解IPermission可以提供优雅且可维护的解决方案。