joh*_*nny 2 security authorization ldap active-directory
我正在尝试想出一种进行身份验证和授权的好方法。这是我所拥有的。欢迎评论和我的期望。
我在 mac 服务器上有 php。我有用于用户帐户的 Microsoft AD。
我正在使用LDAP在用户登录内网时查询AD。
我的设计问题涉及如何处理该 AD 信息。一位同事建议在 AD 中使用命名约定以避免中间数据库。例如,我有一个网页,personnel_payroll.php。我获取了 url,并使用该 URL 和 AD 用户查询 AD 中的 person_payroll 组。如果登录的用户属于该组,则他们有权查看该页面。我必须为每个页面或至少用户域用户建立一个组来进行通用身份验证。
页面上的控件变得更加棘手。例如,假设页面或网格上有一个按钮,只有经理才能看到它。我需要在 AD 中将 person_payroll_myButton 作为一个组。如果用户属于该组,他们就会获得该按钮。如果一个页面有多个不同级别的授权,我可以有很多组。
是的,我的 AD 会很大,但如果我不这样做,其他东西也会很大,无论是 MySQL(或其他一些数据库)、文本文件、httpd.conf 等。
我将有一个通用的 php 函数 IsAuthorized,用于传递 url 或控件名称和经过身份验证的用户的各种项目。
使用这样的安全命名约定并使用 AD 作为存储库是否存在本质上的错误?我必须保留在某个地方。为什么不是AD?
谢谢您的评论。
编辑:您认为此方案会因为 LDAP 调用而导致页面超慢吗?
编辑:我不是第一个想到这一点的人。任何对此的想法都值得赞赏。
编辑:谢谢大家。很抱歉我无法给你们更多的回答分数。我必须选择一个。
我想知道是否有一种不同的方式来表达和存储权限,从而更干净、更高效地工作。
大多数应用程序都分为功能区域或角色,并且根据这些[广泛]区域分配权限,而不是按页面权限分配。例如,您可能拥有如下权限:
或者通过角色,您可以:
角色(可能还有每个功能的权限)可能已经映射到 Active Directory 中存储的数据,例如现有的 AD 组/角色。即使没有,它仍然比每页权限更容易维护。权限可以作为用户组进行维护(用户要么在组中,所以拥有权限,要么没有),或者作为自定义属性进行维护:
dn: cn=John Doe,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: webAppUser
cn: John Doe
givenName: John
...
myApplicationPermission: UseApplication
myApplicationPermission: ViewPayrollData
Run Code Online (Sandbox Code Playgroud)
这样做的优点是架构更改最少。如果您使用组,AD(以及地球上的所有其他 LDAP 服务器)已经具有该功能,并且如果您使用这样的自定义属性,则只需要添加一个属性(可能是上例中的objectClass, ) webAppUser。
接下来,您需要决定如何使用数据。一种可能是在用户登录时检查用户的权限(找出他们所在的组,或者他们被授予的权限),并将其存储在会话中的网络服务器端。这样做的问题是权限更改仅在用户登录时生效,而不是立即生效。如果您不希望权限经常更改(或者当用户同时使用系统时),这可能是一个合理的方法。这种情况有多种变化,例如在一段时间过去后重新加载用户的权限。
另一种可能性是根据需要检查权限,但会带来更严重(负面)的性能影响。在这种情况下,您最终会更频繁地访问 AD 服务器,从而导致负载增加(Web 服务器和 AD 服务器上)、网络流量增加以及延迟/请求时间增加。但您可以确定权限始终是最新的。
如果您仍然认为将单独的页面和按钮名称作为权限检查的一部分很有用,您可以拥有页面/按钮 => 权限的全局“映射”,并通过它进行所有权限查找。一些东西(完全未经测试,大部分是伪代码):
$permMap = array(
"personnel_payroll" => "ViewPayroll",
"personnel_payroll_myButton" => "EditPayroll",
...
);
function check_permission($elementName) {
$permissionName = $permMap[$elementName];
return isUserInLdapGroup($user,$permissionName);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2187 次 |
| 最近记录: |