簡體   English   中英

適用於Java Web應用程序SSO的Windows集成身份驗證

[英]Windows integrated authentication for java web application SSO

背景 :我目前有一個Java Web應用程序,該應用程序在Mac的localhost上運行。 用戶可以登錄到Web應用程序,並且其憑據也將通過在我的本地計算機上的特定端口上運行的OpenLDAP服務器進行驗證(特別是使用此docker映像 )。 該Web應用程序包括與LDAP服務器交互以提供登錄用戶名和密碼的代碼。 驗證成功后,用戶將登錄並可以繼續使用該應用程序的功能。

問題 :此Web應用程序將部署到將使用Windows的客戶端。 他們正在請求SSO功能-即,在其域下成功登錄到他們的Windows計算機將避免在運行Web應用程序時登錄到Web應用程序。 客戶端不能在其機器上運行其他Java應用程序,這將有助於SSO-簡單地登錄其Windows機器應繞過登錄Web應用程序的需要,這意味着需要以某種方式配置Windows,並且Web應用程序需要為SSO配置某種方式。 出於測試目的,我使用的是Windows 7虛擬機,該虛擬機在運行和測試Web應用程序的同一台計算機上運行。

我已經對SPNEGO,Java GSS API(看起來需要客戶端代碼才能與服務器進行通信),Kerberos,Windows IIS等進行過研究。我知道如何在Windows中啟用Windows集成身份驗證,但是我不知道如何實際在我的Web應用程序中使用它來啟用SSO。 基本上,在這種情況下,我仍在努力實現特定情況下的SSO功能。 以下是一些具體問題:

  1. 瀏覽器是否可以配置為將運行它們的計算機的加密Windows憑據發送到Web應用程序,然后可以由Web應用程序解密並根據LDAP進行身份驗證? 如果是這樣,這如何運作?
  2. Windows登錄憑據是否可以配置為指向驗證它們的LDAP服務器?
  3. 總體而言,我如何為Windows計算機上運行的Web應用程序集成單點登錄,在Windows計算機上,該Web應用程序配置為通過LDAP服務器對憑據進行身份驗證?

Windows SSO基於Kerberos,而不基於LDAP。 人們通常將它們混淆的原因是Microsoft Active Directory既充當LDAP服務器又充當Kerberos服務器。

如果您需要Windows用戶的透明身份驗證(SSO),則必須實現Kerberos身份驗證。

他們將如何為Web應用程序實現Kerberos的方式稱為SPNEGO。

您需要執行以下操作:

  1. 在Active Directory中為您的服務器創建一個服務帳戶,例如REALM \\ svc_server
  2. 為您的服務器創建一個SPN,它將服務器的域名綁定到該服務器帳戶。 如果您的服務器在https://server.acme.com上運行,則應為HTTP / server.acme.com
  3. 如果Windows用戶登錄到域REALM並轉到https://server.acme.com,瀏覽器將基於名稱HTTP / server.acme.com查找SPN,從Active Directory請求Kerberos票證並將其發送到服務器中。根據SPNEGO規范的授權標頭
  4. 現在,您只需要使用內置的Java Kerberos API或某些第三方庫( kerb4jspring-security-kerberos等)來驗證此票證

如您所見,LDAP不參與此身份驗證流程(盡管下一步可以將其用於授權)

暫無
暫無

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

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