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

Tor*_*sen 2 .net c# wcf

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

User,Role,Permission(我也有复合的实体:UserRoleRolePermission).

Permission对象有像自定义属性bool CanRead,bool CanWrite.角色可以包含许多权限.

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

Phi*_*rdt 8

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

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

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

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