我有一個IIS應用程序(AngularJS和PHP),身份驗證使用Windows身份驗證(禁用匿名身份驗證)。我想有一個按鈕,無論何時單擊,將查找活動目錄用戶。在登錄是否有可能將LDAP與當前登錄的用戶綁定到PHP?
$ldap_server = "ldap://MyDomain.local";
$auth_user = "[email protected]";
$auth_pass = "myPass";
$base_dn = "OU=MyDomain, DC=MyDomain, DC=local";
$filter = "(&(objectClass=user)(objectCategory=person)(cn=*))";
if (!([email protected]_connect($ldap_server))) {
die("Could not connect to ldap server");
}
if (!([email protected]_bind($connect, $auth_user, $auth_pass))) {
die("Unable to bind to server: ". ldap_error($connect) . " (" . ldap_errno($connect) . ")");
}
if (!([email protected]_search($connect, $base_dn, $filter))) {
die("Unable to search ldap server: ". ldap_error($connect) . " (" . ldap_errno($connect) . ")");
}
然而,用戶已經提供的憑證時(通過IIS Windows身份驗證),我想使用相同的用戶憑據(或實際模擬用戶):它與下面的代碼成功的作品。 我可以在不詢問用戶名和密碼的情況下這樣做嗎?
我試圖讓服務器的變量({$ _ SERVER [ 'AUTH_USER']}和{$ _ SERVER [ 'AUTH_PASSWORD']})。只有用戶被填充(有意義...)。
我也試圖跳過的ldap_bind(),只與調用它$連接參數,但我總是得到同樣的錯誤: 無法搜索LDAP服務器:操作錯誤(1)
當然,我可以在PHP中存儲專用的用戶名+密碼,但希望避免這種情況,並使用已登錄的用戶身份驗證。
謝謝!
哎喲。通常,服務器甚至不會看到用戶密碼(取決於IIS,瀏覽器,客戶機的配置),而是使用Kerberos。此時事情開始變得棘手。您可以授予用戶IIS(通常是計算機)下運行的標誌「可信任委派」。但即使如此,PHP不支持GSSAPI綁定。所以你在那裏運氣不好。 –
謝謝@Johannes。我感到奇怪的是,我正在使用經過驗證的用戶上下文運行,該用戶上下文具有搜索活動目錄的所有權限,但我需要再次詢問憑據。感覺就像我們錯過了什麼...... – Elad
我有同樣的需要,我覺得我已經走過這條路。第一步是將IIS配置爲使用模擬。這使得在Web服務器上運行的PHP程序可以使用來自客戶端工作站的安全令牌,在該工作站中,用戶已經通過了Windows身份驗證,而不是運行Web服務器的通用安全上下文。它允許Web服務器「模擬」工作站用戶。它適用於Web服務器本身的資源。下一步被稱爲「授權」,並在網絡上的許多地方進行了描述。搜索「double hop delegation kerberos」 –