iT邦幫忙

1

網頁取得使用者 Windows登入的帳號

Server在linux上 、Tomcat 9、 Java 1.8。

想要在使用者進入網頁時想取得登入者的Windows帳號,
目前除了在ie用ActiveXObject在jsp可以取得之外,有沒有其他方法。

player iT邦大師 1 級 ‧ 2020-08-28 20:34:58 檢舉
與你一樣的問題
8年前就有人問過
只是我不知道現在還能不能用?
https://stackoverflow.com/questions/11988672/how-do-i-get-the-windows-login-username-of-a-user-running-my-web-application
harrytsai iT邦新手 3 級 ‧ 2020-08-31 22:58:11 檢舉
往AD LDAP方向找,會有你要的資訊
1
浩瀚星空
iT邦超人 1 級 ‧ 2020-08-28 17:18:34

沒辦法

因為本機安全性原則。
而且要用 ActiveXObject 還需要用戶同意打開才行。

如果說還有沒有其它辦法的話,就是要建立自已能讓客戶下載的obj才行了。

3
dscwferp
iT邦好手 1 級 ‧ 2020-08-28 20:42:20

轉個彎!
CLIENT端用 WINDOWS 並加入AD
然後 GPO 設定 IE-> [使用目前的使用者名稱及密碼來自動登入]
然後架個IIS SERVER, 上面寫個轉址asp/aspx 網頁程式
這樣USER 先用IE 連這個IIS asp/aspx 網址
asp/aspx 網頁程式 就取得 使用者 Windows登入的帳號
然後轉址到JSP 時 將帳號 帶過去!
這就完成您的需求了!
希望以上能幫助您!

2
raytracy
iT邦大神 1 級 ‧ 2020-08-29 10:31:32

我不知道你想要取得 Username 的用途是甚麼? 不過, 單獨取得 Username 這個內容, 是非常不可靠, 而且很容易被偽造的. 如果你的 App 只信任這個字串, 然後授予他特定存取權限的話, 有心人可以透過偽造這個字串, 而取得非法的使用權.

如果你的目的是要取得可靠的登入者身分, 那麼應該要透過一個驗證程序, 來確認他回報給你的帳號是真實且可靠. 這個方法在 Windows 裡面叫做: Integrated Windows Authentication (簡稱: IWA, 如果你用過 MS-SQL 的 SSMS 介面, 應該就體驗過這個功能; VMWare 的 vCenter 也在 Client 介面上內建了這個功能; 附帶一提, vCenter 是用 Java 寫的, 所以你也一定可以仿造出來).

他的過程大致如下:

  1. Server 端送出 IWA 的驗證要求給瀏覽器 (透過: NTLM 或 Kerbero)
  2. 瀏覽器從 Windows 取出登入的身分 Token 回送給 Server
  3. Server 拿到 Token, 要去跟帳號管理中心驗證 (例如: AD, LDAP)
  4. 管理中心確認該 Token 為真, 此時 Server 才可以開始信任他的身分

各大瀏覽器都支援 IWA 驗證:
Configuring Chrome and Firefox for Windows Integrated Authentication

Tomcat 也支援使用 IWA 驗證:
Apache Tomcat 7: Windows Authentication How-To

完成了這樣的流程之後, 你才能夠開始信任:
從 Client 端回報出來的 Username 是真實可靠的.

因本站篇幅有限, 這裡有比較詳細的解釋:
Spring Security Kerberos 配置IWA的關鍵步驟備忘

其實 IWA 就是一種 Single Sign On (簡稱: SSO, 單次登入) 的概念, 也就是: 用戶只需要登入一個裝置, 就可以用這個登入身分, 持續去登入使用其他的系統....自始至終, User 都只需要在第一個裝置上敲一次帳密, 後面的系統就通通可以獲得授權...

現在很多 SaaS 服務也都提供其他網站的 SSO, 例如: Google, Facebook, Microsoft...等等, 你只要在 G/F/M 上面有帳號可以登入, 其他的網站就可以參考 G/F/M 提供的 Token 來驗證你, 而不需要使用者另外儲存一套帳密在網站上, 重新驗證身分...

但也因為 SSO 的威力強大, 所以不能只單純取得用戶登入的 Username 就加以信任, 每一關都還要做二次驗證, 只不過後續的二次驗證, 不需要由 User 介入 (ex: 重新輸入帳密), 而是系統會自動幫你做完....(因為現在你就是前述的那個: 系統, 所以這些工作要由你的軟體來完成)

==== 我是分隔線

萬一你的用途不是以上所述, 而且不介意 Username 真實性與可靠度的話, 那麼 Windows 的環境變數其實都會儲存用戶登入的資訊, 你只要用 DOS 的 set 指令看一下:
https://ithelp.ithome.com.tw/upload/images/20200829/200266030tIGKNMDS7.png
然後請瀏覽器用 Javascript 取出環境變數 (提醒: 這個動作也是違反安全原則的), 再 POST 回 Server 就可以了. 不過還是要提醒, 這個方法非常不可靠, 我有一百種方法可以讓你拿到假的 Username....

cmwang iT邦大師 1 級 ‧ 2020-08-29 17:29:31 檢舉

AD和Kerberos有設定好的話,Web server送auth required,browser會嘗試以其支援的最佳方式作認證(如果Windows client有join AD而且信任Web server就會送Kerberos ticket給Web server),Web server就可以憑Kerberos ticket判斷是否有效並得知user在AD上的身份了,這是鵝之前幫某個官衙門作SSO的方法....

我要發表回答

立即登入回答