目前有一個需求:使用者通過域帳號登入了電腦,開啟網站(PHP開發的),不需要使用者再次輸入使用者名稱和密碼,而是直接擷取原生域帳號登入系統。
也就是說網站上的使用者帳號和原生域帳號一致的,只要我登入了電腦,我開啟瀏覽器登入網站時,網站不會提示使用者輸入帳號和密碼登入,直接登入網站
PHP能實現這樣的功能嗎?如果不行的話,有沒有其他的技術可以支援?比如java, python, c之類的
我也瞭解過,php有個ladp的擴充,但是這個擴充還是需要接收使用者名稱和密碼
現在有些OA系統實現了這樣的功能,又是怎麼做到的呢?
回複內容:
目前有一個需求:使用者通過域帳號登入了電腦,開啟網站(PHP開發的),不需要使用者再次輸入使用者名稱和密碼,而是直接擷取原生域帳號登入系統。
也就是說網站上的使用者帳號和原生域帳號一致的,只要我登入了電腦,我開啟瀏覽器登入網站時,網站不會提示使用者輸入帳號和密碼登入,直接登入網站
PHP能實現這樣的功能嗎?如果不行的話,有沒有其他的技術可以支援?比如java, python, c之類的
我也瞭解過,php有個ladp的擴充,但是這個擴充還是需要接收使用者名稱和密碼
現在有些OA系統實現了這樣的功能,又是怎麼做到的呢?
LDAP擴充跟MySQL擴充一樣,本質上是從後端儲存系統讀取使用者名稱和密碼的,只不過它的速度特別快。你的問題關鍵在瀏覽器端,如何向伺服器端提交一個身份證明(代替客戶手工輸入使用者名稱和密碼)。
這個身份證明可以是:
URL中的隨機串(或者HEADER中也行),這就是前面@JohnLui 的解決方案了。你可以理解為一個有效期間非常長的Session ID。在某些網站的WAP版,就是這麼乾的,如以前的kaixin001.com,因為那個年代手機瀏覽器的Cookie經常不靠譜,而手機私密性較好,所以採用這種方式。
$_SERVER['REMOTE_ADDR'],如果你們內網的IP是固定的,且對安全要求不是特別高,可以用這種方式臨時頂一頂,取到用戶端IP之後,去IP-員工對應表裡查一下員工名,然後賦予此員工已登入的狀態。
$_SERVER['REMOTE_ADDR'] + LDAP Log,或者Active Directory Log。如果你們的員工電腦都必須通過域帳號才能登入,那麼,取到用戶端IP之後,去LDAP/AD的日誌裡查一下,剛剛從這個IP登入的是哪個員工。由於他在作業系統案頭登入時已經通過了域帳號驗證,所以這種方法比上面那種安全很多。
B/S架構編程限制了,你只能通過$_GET, $_POST, $_SERVER等變數向伺服器端提交身份證明(說白了,你繞不過HTTP),而瀏覽器裡JS的許可權非常低,不在瀏覽器上裝點啥,能做的就上面三種了。
如果可以裝點啥,那辦法就多了:
- 數位憑證。員工初始化時,內網伺服器給他頒發內網認證(就是不用交錢的,不用VeriSign他們認證的),認證裡寫入員工帳號、郵箱什麼的,每次訪問服務端時,瀏覽器檢查到網域名稱匹配就會自動把認證資訊發給服務端。這個在大企業裡用得比較多,也無需開發瀏覽器外掛程式。
- 瀏覽器外掛程式。先用外掛程式把案頭系統的各種身份資訊取到,再附在Header裡發給服務端,服務端就知道當前登入的域帳號是什麼了。前面說了,瀏覽器裡的JS許可權很低,外掛程式的許可權可是很高的,插隊的許可權取決於你的瀏覽器以什麼使用者啟動的。對你的取當前登入網域帳號的需求,肯定是綽綽有餘了。
我曾經在sf上回答過一個類似的問題。
很簡單:
產生一個token,字母和數字組合的那種,做成連結做成瀏覽器書籤或者首頁,可以開機自動啟動瀏覽器開啟首頁。
這種方法很簡單,但是要求網路要安全,或者,用https吧。
安裝瀏覽器延伸外掛程式。這是最完美的方案了吧- -
可以將使用者第一次登陸的域帳號、帳號、密碼寫入一個檔案,或者存入一個表,下次再登陸的時候,進行一下尋找判斷
寫個瀏覽器, 包上.
你這個已經不是PHP做的事情了,php是伺服器端的指令碼,怎麼能處理瀏覽器的事情?
解決方案:寫瀏覽器外掛程式