我有Windows Auth,在IIS中设置了两个规则。我正在使用PHP网站。我知道我可以使用$ _SERVER ['Remote_User']获取登录用户。如何从授权规则中获取用户所在的组?我希望能够根据他们所在的AD组在网站上显示特定内容。
答案 0 :(得分:0)
用户所在的群组
用户可以在多个组中,这些组可以在其他组中。因此,您必须预测每个用户将有多个组。
IIS不会将组成员身份发送到被调用的php脚本。您需要自己查找组(例如,从互联网上使用此功能):
<?php
function get_groups($user) {
// Active Directory server
$ldap_host = "ad.domain";
// Active Directory DN, base path for our querying user
$ldap_dn = "CN=Users,DC=ad,DC=domain";
// Active Directory user for querying
$query_user = "jane@".$ldap_host;
$password = "password1234!";
// Connect to AD
$ldap = ldap_connect($ldap_host) or die("Could not connect to LDAP");
ldap_bind($ldap,$query_user,$password) or die("Could not bind to LDAP");
// Search AD
$results = ldap_search($ldap,$ldap_dn,"(samaccountname=$user)",array("memberof","primarygroupid"));
$entries = ldap_get_entries($ldap, $results);
// No information found, bad user
if($entries['count'] == 0) return false;
// Get groups and primary group token
$output = $entries[0]['memberof'];
$token = $entries[0]['primarygroupid'][0];
// Remove extraneous first entry
array_shift($output);
// We need to look up the primary group, get list of all groups
$results2 = ldap_search($ldap,$ldap_dn,"(objectcategory=group)",array("distinguishedname","primarygrouptoken"));
$entries2 = ldap_get_entries($ldap, $results2);
// Remove extraneous first entry
array_shift($entries2);
// Loop through and find group with a matching primary group token
foreach($entries2 as $e) {
if($e['primarygrouptoken'][0] == $token) {
// Primary group found, add it to output array
$output[] = $e['distinguishedname'][0];
// Break loop
break;
}
}
return $output;
}
来源:https://samjlevy.com/php-ldap-membership/
要使功能起作用,您需要将前4个变量设置为正确的值(取决于您的环境)。在枚举用户/组列表之前,Active Directory需要身份验证(这是默认设置)。因此,您需要一些有效的凭据才能进行查找。