在IIS 7上使用PHP访问用户凭据

时间:2009-05-08 10:17:47

标签: php iis iis-7

我们正在将WordPress MU安装到IIS 7服务器上

我们需要针对AD启用单点登录。

我们很乐意将PHP编码为自动登录/为用户创建帐户等。

我们需要帮助的是如何将用户凭据(用户名,电子邮件,姓名等)从IIS / Windows服务器获取到PHP变量中,以便我们可以使用它们。

欢迎所有建议

1 个答案:

答案 0 :(得分:1)

您想要使用ldap。对我来说最困难的部分是找出我的用户所在的OU以及我们需要具有用户名的格式(USERNAME@DOMAIN.COM而不是domain \ username)。我们将它们全部放在默认的用户OU中。这是从我写的cakephp应用程序中获取的,它抓取了一些额外的信息,但它应该让你沿着正确的轨道前进。你的php当然需要编译一个ldap扩展名。

protected function findLdapUser($username, $password, $otheruser = false){
    $config = Configure::read('ldap');
    if(!$username && !$password && $otheruser){
        $username = $config['username'];
        $password = $config['password'];
    }
    if($password == ""){return false;} //prevent anonmyous bind
    if(!$otheruser){
        $otheruser = $username;
    }
    $connection = ldap_connect($config['host'], $config['port']);
    if($connection === false){      //does not detect properly depending on enviroment!
        debug("cannot connect to ldap server");
        return 0; //cannot connect!
    }
    ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, $config['version']);
    if (!@ldap_bind($connection, $username . $config['userpostfix'], $password)){
        return false;
    }

    //search for user data
    $fields = array('mail', 'name', 'telephoneNumber', 'physicalDeliveryOfficeName');
    //$filter = "sAMAccountName=" . $username;
    $filter = "userPrincipalName=" . $otheruser . $config['userpostfix'];
    $results = ldap_search($connection, "CN=USERS,".$config['basedn'], $filter, $fields);
    $info =  ldap_get_entries($connection, $results);
    if($info['count'] == 0){return false;}
    @ldap_unbind($connection);
    $return['LdapUser']['email'] = $info[0]['mail'][0];
    $return['LdapUser']['fullname'] = $info[0]['name'][0];
    //supress warnings
    @$return['LdapUser']['office'] = $info[0]['physicaldeliveryofficename'][0];
    @$return['LdapUser']['phone'] = $info[0]['telephonenumber'][0];
    return $return;
}