簡體   English   中英

使用活動目錄進行身份驗證的更簡潔方法?

[英]Cleaner way of authenticating with active directory?

在我工作的地方,我們使用匿名目錄訪問,因為某些SMTP服務器需要它。 我不知道具體情況。 對於我正在從事的項目,我想使用活動目錄登錄。 我遇到的問題是,我無法檢查ldap == true,因為它會/ always /始終等於true。 另外,我正在執行整個登錄並在沒有JavaScript的情況下在一頁上顯示內容。

這是我所做的:

$adServer = 'ipaddress';
$ldapconn = ldap_connect($adServer)
or $this->msg = "Could not connect to LDAP server.";
//Begin magic to compensate for anonymous directory access while still locking out anonymous users
if($_POST["password"] == null)
{
$password = "invalid";
}
else $password = $_POST["password"];
$ldaprdn = "domain\\" . $_POST["username"];
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $password);

if($ldapbind) {
$loggedin = true;
}
elseif(isset($_POST["password"]) && !$_POST["password"] == null) {
$msg = "Incorrect username or password";
$loggedin = false;
}
else {$loggedin = false;}

基本上是用錯誤的密碼進行硬編碼,然后等待登錄表單傳遞真實的密碼。 該系統有效,但我想知道是否有更清潔/更輕松/更快的方法。

這個問題與ldap無關,而是一個更通用的問題,例如: 如何在PHP中進行表單驗證?

if (isset($_POST["password"]) === false) {
    throw new Exception("Missing input");
}
if (is_string($_POST["password"]) === false) {
    throw new Exception("Bad input");
}
// now you now password exists, and it's a string so you can pass it to ldap

當客戶端連接到LDAP目錄服務器時,該連接具有未經身份驗證的授權狀態。 LDAP客戶端可以使用BIND請求來請求服務器將連接的授權狀態更改為與BIND請求中的信息關聯的狀態(在Simple BIND請求中,唯一的信息是DN和密碼)。 成功更改連接的授權狀態后,將使用該授權狀態對該連接進行進一步的操作,直到:

  • 新的BIND請求到達連接
  • 連接由客戶端或服務器終止。

這就是“身份驗證”與LDAP一起工作的方式。 您已經或多或少地將其封裝在代碼段中,盡管您沒有檢查可能與BIND響應一起到達的響應控件。

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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