簡體   English   中英

通過 Active Directory 使用 LDAP 在 PHP 中進行身份驗證

[英]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 的非常簡單的過程,而無需庫。 但是有很多事情會很快使它復雜化:

  • 您必須驗證輸入。 否則,空的用戶名/密碼將通過。
  • 綁定時應確保用戶名/密碼正確編碼。
  • 您應該使用 TLS 加密連接。
  • 使用單獨的 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...
}

上面的身份驗證調用將:

  • 驗證用戶名或密碼都不是空的。
  • 確保用戶名/密碼正確編碼(默認為 UTF-8)
  • 嘗試備用 LDAP 服務器以防萬一出現故障。
  • 使用 TLS 加密身份驗證請求。
  • 如果失敗(即鎖定/禁用帳戶等),請提供其他信息

還有其他庫也可以執行此操作(例如 Adldap2)。 但是,我覺得有必要提供一些額外的信息,因為投票最多的答案實際上是一個安全風險,在沒有完成輸入驗證並且不使用 TLS 的情況下依賴。

我只是通過將用戶憑據傳遞給 ldap_bind() 來做到這一點。

http://php.net/manual/en/function.ldap-bind.php

如果賬號可以綁定LDAP,則有效; 如果不能,那就不是。 如果您所做的只是身份驗證(而不是帳戶管理),那么我認為不需要圖書館。

我喜歡Zend_Ldap類,你可以在你的項目中只使用這個類,而不需要 Zend 框架。

PHP 有庫: http ://ca.php.net/ldap

PEAR 還有很多包: http ://pear.php.net/search.php?q=ldap&in=packages&x=0&y=0

我也沒有使用過,但我打算在某個時候使用它們,它們似乎應該可以工作。

對於那些尋找完整示例的人,請查看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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM