安全架构 - 驱动 UI 和特权(权利)的设置 - 基于角色,每个用户帐户
Posted
技术标签:
【中文标题】安全架构 - 驱动 UI 和特权(权利)的设置 - 基于角色,每个用户帐户【英文标题】:Security Architecture - Settings to drive UI and Priveledges (Rights) - Role-Based, per User-Account 【发布时间】:2011-07-09 01:03:42 【问题描述】:大公司如何实现他们的安全要求,这些要求集中并用于驱动人们可以做的事情(允许调用某个网络服务、提交订单等)以及驱动 UI(禁用按钮、菜单选项,单个表单域)?
我正在考虑 RBAC 架构:用户 -> 角色、角色 -> 权限。
具有基于许多单独字段-帐户-用户-角色-数量阈值的权限的复杂应用程序将具有许多很多“角色”,并且随着角色数量的增加,管理这些变得复杂。
管理所有这些可能的选项似乎令人生畏,而我之前的经验是在应用程序中硬编码此类逻辑。
例如:If (User.Roles("IsAccounting"))
btnEditOrder.enabled = false;
我的任务是设计/实现一个安全服务/架构,它将用作任何/所有应用程序(所有 .NET,但一些 GUI 和一些面向过程)的通用身份验证/授权点。
这是不可能开箱即用的,因为围绕客户帐户的业务组织和基于财务金额的权限层级。
例如:John 是用户,他可以查看和提交帐户“Microsoft”和“Google”的请求。 Mike 可以查看“Microsoft”和“Google”请求,但只能提交“Google”请求。
帐户/用户数量庞大且多变。
如果我遵循 RBAC,将有数百个“角色”来容纳所有必需的权利(特权)。这无济于事,因为最终目标是提供易于管理的 GUI 工具,以便管理人员可以将其直接下属分配给适当的角色。
我正在考虑使用以下 API(伪代码粗略草案)来实现这个安全部分:
UserContext securityContext = Security.GetContext(userID, userPwd);
在应用程序中的用法是这样的:
if (securityContext.RequestManager.CanSubmitRequest("Google")) ...
这样会有成千上万的“Can(params)”方法来检查权限,这并不容易管理或使用这种模式。
感谢任何链接/想法/指针。
这是一家 .NET 商店,但我从 .NET(成员资格/AzMan)中看到的任何内容都无法满足我们所需的粒度和委派要求。 ActiveDirectory / Oracle LDAP 集成会很好,但不是必需的。
旧(当前)系统使用 LDAP 对用户进行身份验证,但所有授权都在内部完成并存储在经典的“用户、角色、权限”表中。
【问题讨论】:
【参考方案1】:我们有几乎相同的要求,我们在大组织中有多个应用程序,我们不得不
保护多个应用程序的身份验证和授权 并从同一个中心位置管理所有这些应用程序,没有 无论这些应用程序是 .net 还是非 .net、基于 GUI 或进程 面向,
运行的应用程序可能基于 Internet 或 Intranet
应用程序应支持 AD 用户或联合用户 身份验证和授权
应用大量“基于角色”或“基于权限”的安全性或 自定义。
例如。启用/禁用功能 - 如启用按钮、禁用按钮、隐藏某些菜单、更改控件的背景颜色或更改 .net 组件的任何 .net 支持的属性等。
用于身份验证和授权的安全 Web 服务或 wcf 服务
通过组为多租户应用程序应用基于角色的安全性 和用户管理
管理组织的多个应用程序的用户 中心位置
跟踪用户的操作或审核。
【讨论】:
以上是关于安全架构 - 驱动 UI 和特权(权利)的设置 - 基于角色,每个用户帐户的主要内容,如果未能解决你的问题,请参考以下文章
测试和设置(或其他原子RMW操作)是否是任何架构上的特权指令?