公司要架設一個內部系統,希望透過lpad的方式來驗證用戶當做登入的資訊
目前小弟已經抓出這些資料
已經可以定義帳號為英文名字或是email了,
但抓不到密碼資訊,實在不知道密碼要怎麼做驗證…
這是小弟目前已經抓到的欄位資料
小弟知道密碼已經是經過加密的了,但重點不是有沒有加密,而是抓不到密碼,實在不知道怎麼驗證呀…
苦腦中…求前輩指導…
ldap_bind() 能夠執行成功,就代表帳號密碼無誤了,為什麼還要抓密碼?
ldap 也不會允許讓你抓出密碼欄。密碼欄你只能寫入,不能讀出。
ghyzsing提到:
帳號為「admin」,密碼為「test」
若該帳號是管理者權限,那麼就可以讀寫所有人的資料。可是登入驗證不需要這麼做。只要把該 user 填的帳密,用 ldap_bind() 去登入,就能知道該帳密 OK 不 OK 了。
但小弟在ldap_bind認證過了之後
後續的抓資料是@ldap_search($ldapconn, "dc=wonder,dc=game,dc=tw", $filter);
這裡並沒有指定帳號為誰呀…
前輩是否有line或是其它通訊方式,在私下指導小弟呢?
小弟請網管另開一個獨立帳號出來,突然覺得好像發現盲點了
oh..網管剛才了一個個人帳號「test」出來,用這個「test」就登入失敗…
要撈出多少資料要看 ldap_search傳入的參數決定,如果沒有特別權限限制一般user也可以找到全部資料。
ldap_bind的時候要用完整UID,有時候登入的帳號會存在於不同的OU,造成有的帳號可以登入有的帳號不能登入的情形,所以要分兩階段去做,先用登入帳號做ldap_search,找到後確認這個帳號uid,再用這個帳號的uid和密碼做ldap_bind測試認證。
剛剛去問網管時,網管說沒有uid這個欄位可以設定
但小弟撈出來有uid字眼的是這個,不知前輩指的uid是否為圖裡的亂碼呢?
另外小弟已經可以撈出固定帳戶的資料,
但為什麼只輸入samaccountname就可以出現呢?
不是應該還需要一道密碼呢?
另外小弟不解的是…密碼不知該設定在哪個參數帶進去
補充上個回應的程式碼
這裡有一個可以馬上測試的範例:
How to use LDAP Active Directory Authentication with PHP
他的基本原理是: 用你要驗證的那個 username 和 password 去做 ldap_bind, 如果可以 bind 成功, 代表密碼正確; 如果 bind 失敗, 密碼就是錯的.
你不需要自己去比對 LDAP 裡面所存的密碼雜湊是否正確? 這個工作只要透過 ldap_bind 程式庫來幫你做就好了, 這樣可以連密碼雜湊都不會洩漏給程式知道. 所以使用 ldap_bind 的時候, 並不是把 admin 的密碼船進去, 而是要傳被驗證人的帳密.