背景:
我在IIS8上有一个基于PHP的网站,具有Active Directory集成,我需要提供不同级别的访问控制。例如:
Customer Service
- View Transactions
- View Customers
Finance
- Edit Transactions
- View Transactions
- View Customers
目前,我们使用IIS的AD集成来控制对站点安全部分的登录,但不能基于组分离出权限(例如:上面的示例)。
题:
有没有办法(通过PHP)使用AD不仅仅是简单的登录,我可以确定一个人在哪个AD组,所以我可以编程方式将我的页面创建基于他们的组?
这取决于。您的站点使用NTLM或通过直接请求AD服务器检查AD凭据?在第一种情况下(NTLM)网站只收到一些关于帐户(samaccountname,域)的数据,因此它对AD中的自定义字段一无所知,其中包含有关权限的数据,您需要控制网站中的访问权限,也许您可以写一些同步工具,它将从AD导出访问并将其放到您站点的数据库中。在第二种情况下,您的站点具有用户对AD的访问权限,并且可能(取决于您的AD设置)可以读取AD中的某些特定于访问的字段。我的答案基于我在nginx / linux下工作的php网站上编写AD auth的经验,情况可能与基于IIS的php环境不同。
结果是满足我对单一登录机制的需求,没有单独的查找帐户,不同的组权限等,这非常简单,根本不需要LDAP。
这就是字面意思。没有LDAP库,没有LDAP调用。 IIS将负责这一切。
如果文件存在,则它们位于文件夹所代表的AD组中。如果没有,则他们不在小组中。然后,以编程方式,如果我在“财务”上有“存在”(例如:我的问题的例子),我允许他们“编辑交易”访问。
坏处:
这不是跨平台安全的(尽管这些方法可以很容易地适应其他平台)。