使用PHP Web应用程序

时间:2016-07-04 13:35:16

标签: php azure amazon-web-services active-directory azure-active-directory

我有一个PHP网站,想要针对Azure Active Directory验证用户身份。使用ldap_connect和bind,对于我们公司的本地AD服务器,我没有任何问题。

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服务器。但我的应用程序托管在亚马逊网络服务(AWS)上,并且不在同一个域中,所以我不能这样使用。
我使用ClientId测试了graphapi,并从Azure测试了我公司的密钥。所以我可以阅读用户数据,但我没有看到任何检查用户/密码组合的可能性。我只想检查,如果有用户使用此密码,我不需要从那里阅读。
所以我尝试通过更改adServer和用户的参数来修改上面的LDAP解决方案
 $ldaprdn = 'sAMAccountname=' . $username . ',cn=users' . ',dc=myDomain,dc=com';

但是我还是得到了:"警告:ldap_bind():无法绑定到服务器:无法联系LDAP服务器" 。我为adServer尝试了这个多个版本,但是任何一个版本都是绑定 你知道错误在哪里吗?我建议ldap_connect是wron方式,特别是我不知道哪个服务器地址是正确的,以及我如何告诉ClientId和密钥。

1 个答案:

答案 0 :(得分:2)

目前,Azure AD不支持LDAP连接。它提供OAuth2身份验证和授权。您可以参考Authentication Scenarios for Azure AD了解详细的Azure AD方案。

您需要对域中的用户进行身份验证,您可以利用此code sample通过Azure AD实现身份验证。

否则,您可以按照Authorization Code Grant Flow构建自定义代码来验证用户身份。

如有任何疑问,请随时告诉我。