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

C# 如何在WCF中使用自己的权限?,c#,.net,wcf,C#,.net,Wcf,我正在考虑使用WCF内置功能来帮助我实现位于WCF之上的授权服务。我已经有了如下表格: 用户,角色,权限(我还有复合实体:用户角色和角色权限) Permission对象具有自定义属性,如bool-CanRead,bool-CanWrite。角色可以包含许多权限 这与WCF现有的授权框架有何关联?我想尽量不要重新发明轮子。我如何使用自己的权限?我可以从.NET示例中看到角色是如何工作的,但不能看到我自己的自定义权限实体。有什么提示可以让我从正确的方向开始吗?提供了一个基本的常规方法。基本上,您可以

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

用户
角色
权限
(我还有复合实体:
用户角色
角色权限

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

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

提供了一个基本的常规方法。基本上,您可以构造一个自定义主体,其中包含与
IAuthorizationPolicy
中的用户权限相关的数据,并将该自定义主体附加到WCF
OperationContext
。这保证了无论线程是如何管理的,您都可以通过
Thread.CurrentPrincipal
访问此主体

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

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


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

如何实现这一点取决于您的服务是如何设置的(是通过web还是仅通过本地网络提供的?)以及您使用的绑定。例如,如果您的服务仅在本地网络上运行,NetTcpBinding应该能够使用windows标识等。你能给我们更多的信息吗?:)嗨,我也有同样的问题,你能看看这个吗: