我正在设计一个基于 Soa 原则的系统。对于身份验证,将使用传统的令牌方法。但是需要根据访问功能的用户的角色,在消费者应用程序内激活或停用按钮和标签的位置进行授权。
这些应用程序正在 wpf (prism) 上开发。
有没有一种已知且经过验证的方法来处理这个问题?
我们应该设计我们的自定义机制吗?
谢谢!
我正在设计一个基于 Soa 原则的系统。对于身份验证,将使用传统的令牌方法。但是需要根据访问功能的用户的角色,在消费者应用程序内激活或停用按钮和标签的位置进行授权。
这些应用程序正在 wpf (prism) 上开发。
有没有一种已知且经过验证的方法来处理这个问题?
我们应该设计我们的自定义机制吗?
谢谢!
WPF Prism 不处理授权(根据this)。因此,您需要自己构建解决方案。
我建议看一下基于声明的授权(使用身份模型管理声明和授权可以为您提供高级视图)。您可以使用的声明示例包括:“UserCanSaveCustomerSettings”、“UserHasCustomerManagementPrivelege”。
在为您的应用程序配置声明后,您可以使用此信息来启用/禁用控件。我可以建议你两个选择。
如果您使用 MVVM 模式,您可以将访问信息(例如,您可以从ClaimsPrincipalPermission.CheckAccess获取)公开为 ViewModel 的属性,并将此属性直接绑定到控件。就像是
或者,您可以实现IValueConverter并通过 ClaimsPrincipalPermission.CheckAccess 或直接通过ClaimsAuthorizationManager.CheckAccess再次访问声明。
此外,您可能需要考虑到您的安全性不应仅基于启用/禁用控件。例如,在 WPF 中有许多工具(例如Snoop)可以轻松启用/取消隐藏/单击任何控件。您可能还想检查应用程序/服务层中的访问权限(您也可以使用基于声明的授权,检查ClaimsPrincipalPermissionAttribute)。
几个答案:
有没有一种已知且经过验证的方法来处理这个问题?
是的,有几种方法。您正在寻找的是所谓的外部授权(这是一个原则)。不同的框架和语言有不同的实现方式,例如 Spring Security / Spring EL(在 Java Spring 世界中)或 MS Claims 在 .NET 世界中。有技术解决方案,也有标准(例如 RBAC、ABAC、XACML...) ABAC,基于属性的访问控制模型将让您在称为策略决策点 (PDP) 的中心位置定义授权,然后连接您的不同应用程序并通过策略执行点 (PEP) 分层到 PDP。这意味着您可以将相同的授权规则应用于表示层 (WPF) 和其他层(例如,使用 WCF 的服务层......)
我们应该设计我们的自定义机制吗?
否 :-) 重用已经存在的内容并尽可能使用标准。出于好奇,您是重新发明了一种用于身份验证的令牌类型,还是使用标准的一种,例如 SAML 或 Kerberos?
免责声明:我为 XACML 供应商 Axiomatics 工作。
我不知道有任何开源 .NET XACML 实现,但 Axiomatics 确实提供了您可能感兴趣的商业解决方案。