从PHP web应用程序对Azure Active Directory用户进行身份验证


Authenticate users against Azure Active Directory from PHP web application

我有一个PHP网站,想对Azure Active Directory用户进行身份验证。使用ldap_connect和bind,我对我们公司的本地AD-Server执行此操作没有问题。

function checkADAccount($username, $password)
{
    $adServer = "myADServer";
    $ldaprdn = 'myDomain' . "''" . $username;
    $ldap = ldap_connect($adServer);
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    $bind = @ldap_bind($ldap, $ldaprdn, $password);
    if ($bind) {
        @ldap_close($ldap); // Verbindung schließen
        return true;
    } else {
        return false;
    }
}

但是我的应用程序托管在亚马逊网络服务(AWS)上,不在同一个域中,所以我不能使用这种方式。使用ldap_connect并将此函数绑定到我们公司的本地AD-Server。但是我的应用程序托管在亚马逊网络服务(AWS)上,不在同一个域中,所以我不能使用这种方式。
我在Azure上用我公司的ClientId和key测试了graphapi。因此,我可以读取用户数据,但看不到检查用户/密码组合的任何可能性。我只想检查,是否存在一个用户使用这个密码,我不需要从那里读取它。
因此,我尝试通过更改adServer和用户的参数来修改上面的ldap解决方案
$ldaprdn = 'sAMAccountname=' . $username . ',cn=users' . ',dc=myDomain,dc=com';

但是我允许get: "警告:ldap_bind():无法绑定到服务器:不能联系LDAP服务器"。我尝试了多个版本的adServer,但没有一个提供绑定。
你知道错误在哪里吗?我建议使用ldap_connect是错误的方式,特别是我不知道哪个服务器地址是正确的,以及我如何告诉ClientId和键。

目前Azure AD不支持LDAP连接。它提供OAuth2认证和授权。您可以参考Azure AD的身份验证场景了解详细的Azure AD场景。

对于验证域中用户的需求,您可以利用此代码示例通过Azure AD实现身份验证。

否则,您可以按照授权代码授予流构建您的自定义代码来验证您的用户。

如有任何问题,请随时与我联系。