Windows身份验证 - 获取用户/组

时间:2018-02-01 21:03:20

标签: php windows authentication

我有Windows Auth,在IIS中设置了两个规则。我正在使用PHP网站。我知道我可以使用$ _SERVER ['Remote_User']获取登录用户。如何从授权规则中获取用户所在的组?我希望能够根据他们所在的AD组在网站上显示特定内容。

1 个答案:

答案 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需要身份验证(这是默认设置)。因此,您需要一些有效的凭据才能进行查找。