使用Active Directory在IIS上托管的基于PHP的网站上的程序化访问控制?

问题描述 投票:1回答:2

背景:

我在IIS8上有一个基于PHP的网站,具有Active Directory集成,我需要提供不同级别的访问控制。例如:

Customer Service
- View Transactions
- View Customers
Finance
- Edit Transactions
- View Transactions
- View Customers

目前,我们使用IIS的AD集成来控制对站点安全部分的登录,但不能基于组分离出权限(例如:上面的示例)。

题:

有没有办法(通过PHP)使用AD不仅仅是简单的登录,我可以确定一个人在哪个AD组,所以我可以编程方式将我的页面创建基于他们的组?

php active-directory iis-8
2个回答
0
投票

这取决于。您的站点使用NTLM或通过直接请求AD服务器检查AD凭据?在第一种情况下(NTLM)网站只收到一些关于帐户(samaccountname,域)的数据,因此它对AD中的自定义字段一无所知,其中包含有关权限的数据,您需要控制网站中的访问权限,也许您可以写一些同步工具,它将从AD导出访问并将其放到您站点的数据库中。在第二种情况下,您的站点具有用户对AD的访问权限,并且可能(取决于您的AD设置)可以读取AD中的某些特定于访问的字段。我的答案基于我在nginx / linux下工作的php网站上编写AD auth的经验,情况可能与基于IIS的php环境不同。


0
投票

结果是满足我对单一登录机制的需求,没有单独的查找帐户,不同的组权限等,这非常简单,根本不需要LDAP。

  • 关闭IIS中的站点的“匿名身份验证”。
  • 在IIS中为站点启用Windows身份验证。
  • 创建代表每个组的网站子文件夹。
  • 在每个文件夹中放入一个文件(空或一个字节)。
  • 删除所有Windows AD访问权限(程序员/管理员除外)。这包括IUSR - 也将其删除 - 到子文件夹。
  • 按组添加对文件夹的访问权限。
  • 编写一小部分PHP来检查“[GroupNameFolder] /PermFile.txt”(或其他任何名称)的存在。

这就是字面意思。没有LDAP库,没有LDAP调用。 IIS将负责这一切。

如果文件存在,则它们位于文件夹所代表的AD组中。如果没有,则他们不在小组中。然后,以编程方式,如果我在“财务”上有“存在”(例如:我的问题的例子),我允许他们“编辑交易”访问。

坏处:

这不是跨平台安全的(尽管这些方法可以很容易地适应其他平台)。

© www.soinside.com 2019 - 2024. All rights reserved.