![](/img/trans.png)
[英]getting error when authenticate against active directory with php ldap
[英]Authenticate against ldap using PHP, active directory, while using IE/Firefox
下面的代碼檢查用戶對ldap的憑據
<?php
$ldaphost = "ldap.domain.com";
$ldapport = 389;
$ds = ldap_connect($ldaphost, $ldapport)
or die("Could not connect to $ldaphost");
if ($ds)
{
$username = "johndoe@domain.com";
$upasswd = "pass";
$ldapbind = ldap_bind($ds, $username, $upasswd);
if ($ldapbind)
{print "Congratulations! $username is authenticated.";}
else
{print "Access Denied!";}
}
?>
我的用戶使用Firefox和IE,我知道可以無縫傳遞他們的ActiveDirectory證書。
我只想檢查AD組以查看是否在那里找到該用戶名,如果是,則顯示該頁面,否則提示輸入憑據。
由於我們的用戶已經登錄到域控制器,我想獲取他們的用戶名,檢查是否在特定組中找到它,然后讓他們進入,否則提示用戶輸入憑據。 這怎么可能?
實際上,您不需要使用PP代碼與Active Directory服務器通信,以實現您希望使用IIS作為Web服務器的事實。
這里的關鍵詞是集成Windows身份驗證 - 這是djn 尋找的措辭。 如果啟用此選項(並拒絕匿名訪問),IIS將根據Active Directory檢查提供的憑據以及所請求資源的NTFS文件系統特權。 因此,您可以使用簡單的NTFS訪問控制機制來控制對文件的訪問。
如果您的用戶使用IE,他們甚至不必輸入他們的憑據,因為這是通過所謂的SPNEGO (簡單和受保護的GSSAPI協商機制)及其底層機制Kerberos或NTLMSSP自動完成的,具體取決於您的客戶端和服務器的能力處理。
據我所知,Firefox也能夠自動將Windows登錄憑據交給您的服務器。 您必須調整配置選項才能啟用該功能 - 不知道此信息在Firefox 3.5.x中是否仍然有效。
如果您在* nix系統上運行Apache,則必須使用某些服務器端模塊來處理類似於集成Windows身份驗證的系統。 可能的選項是(不知道它們實際上是否仍然保持或穩定):
對於Windows上的Apache,有:
mod_ntlm
(過時;與上面的mod_ntlm
) mod_auth_sspi
( mod_ntlm
后繼者) 請注意,大多數這些模塊似乎都很老。
剛剛在類似的設置上工作:我跳過所有那些讓Web服務器用AD驗證客戶端的LDAP內容,然后讓他進去(對不起,我不記得在M $備用宇宙中這叫做什么)。
如果客戶端到達PHP腳本,他在AD中,我的用戶名都在$_SERVER["AUTH_USER"]
和$_SERVER["LOGON_USER"]
,否則他永遠不會訪問腳本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.