[英]Authenticating in PHP using LDAP through Active Directory
我正在尋找一種通過 LDAP 和 PHP 對用戶進行身份驗證的方法(Active Directory 是提供者)。 理想情況下,它應該能夠在 IIS 7 上運行( adLDAP在 Apache 上運行)。 有人做過類似的事情,成功了嗎?
當您只需要兩行代碼時,導入整個庫似乎效率低下......
$ldap = ldap_connect("ldap.example.com");
if ($bind = ldap_bind($ldap, $_POST['username'], $_POST['password'])) {
// log them in!
} else {
// error message
}
您會認為在 Active Directory 中簡單地對用戶進行身份驗證將是一個在 PHP 中使用 LDAP 的非常簡單的過程,而無需庫。 但是有很多事情會很快使它復雜化:
在大多數情況下,使用支持上述內容的 LDAP 庫實際上更容易。 我最終推出了自己的庫來處理上述所有問題: LdapTools (嗯,不僅僅是用於身份驗證,它還可以做更多事情)。 它可以像下面這樣使用:
use LdapTools\Configuration;
use LdapTools\DomainConfiguration;
use LdapTools\LdapManager;
$domain = (new DomainConfiguration('example.com'))
->setUsername('username') # A separate AD service account used by your app
->setPassword('password')
->setServers(['dc1', 'dc2', 'dc3'])
->setUseTls(true);
$config = new Configuration($domain);
$ldap = new LdapManager($config);
if (!$ldap->authenticate($username, $password, $message)) {
echo "Error: $message";
} else {
// Do something...
}
上面的身份驗證調用將:
還有其他庫也可以執行此操作(例如 Adldap2)。 但是,我覺得有必要提供一些額外的信息,因為投票最多的答案實際上是一個安全風險,在沒有完成輸入驗證並且不使用 TLS 的情況下依賴。
我只是通過將用戶憑據傳遞給 ldap_bind() 來做到這一點。
http://php.net/manual/en/function.ldap-bind.php
如果賬號可以綁定LDAP,則有效; 如果不能,那就不是。 如果您所做的只是身份驗證(而不是帳戶管理),那么我認為不需要圖書館。
我喜歡Zend_Ldap類,你可以在你的項目中只使用這個類,而不需要 Zend 框架。
對於那些尋找完整示例的人,請查看http://www.exchangecore.com/blog/how-use-ldap-active-directory-authentication-php/ 。
我已經測試了從 Windows Server 2003 Web Server (IIS6) 和運行 IIS 8 的 Windows Server 2012 企業到 Windows Server 2003 和 Windows Server 2008 R2 域控制器的連接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.