傳送安全屬性
利用 傳送安全屬性, WebSphere® Application Server 可以在您的配置中,將安全屬性 (已鑑別主體內容和安全環境定義資訊) 從一部伺服器傳輸到另一部伺服器。 WebSphere Application Server 可能會從企業使用者登錄 (查詢靜態屬性) 或自訂登入模組 (可查詢靜態或動態屬性) 取得這些安全屬性。 動態安全屬性是屬於自訂屬性,可以包括連線所用的鑑別強度、原始呼叫端的身分、原始呼叫端的位置、原始呼叫端的 IP 位址等。
安全屬性傳播會針對「主體」所包含的任何物件,利用 Java™ 序列化來提供傳播服務。 不過, Java 程式碼必須能夠序列化及解除序列化這些物件。 Java 程式設計語言指定 Java 程式碼如何序列化物件的規則。 由於在處理不同的軟體平台和版本時可能會發生問題, WebSphere Application Server 也提供啟用自訂序列化功能的記號架構。 記號組織架構還有其他好處,其中包括識別記號唯一性的能力。 這個唯一性決定了主體的快取方式和記號的用途。 記號架構定義四個標記記號介面,可讓 WebSphere Application Server 執行時期決定如何傳播記號。
使用 WebSphere Application Server 6.0 版以及更新版本,可以將自訂 Java Authorization Contract for Container (JACC) 提供者配置成對 Java Platform, Enterprise Edition (Java EE) 應用程式施行存取控制。 自訂 JACC 提供者可以在進行存取控制決策時,探索呼叫端 JAAS 主體中的自訂安全屬性。
當鑑別要求時,登入模組會判斷這個要求是起始登入 或傳送登入 。 起始登入是先鑑別使用者資訊(通常是使用者 ID 和密碼),再呼叫遠端使用者登錄的應用程式設計介面 (API) 來查閱代表使用者存取權的安全屬性程序。 傳送登入是驗證使用者資訊 (通常是「小型認證機構 (LTPA)」記號) ,然後將組成 WebSphere Application Server已知的自訂物件和記號架構物件的一系列記號解除序列化的程序。
- 授權記號
- 授權記號由所傳送的大部分與授權相關的安全屬性組成。 WebSphere Application Server 授權引擎會使用預設授權記號來制定 Java Platform, Enterprise Edition (Java EE) 授權決策。 服務供應商可以利用自訂授權記號實作,將它們的資料隔離在不同的記號中,執行自訂的序列化和解除序列化,並適時利用記號中的資訊,來進行自訂授權決策。 如需如何使用及實作這個記號類型的相關資訊,請參閱 使用預設傳送記號來傳送安全屬性 和 實作安全屬性傳送的自訂傳送記號。
- 單一登入 (SSO) 記號
- 新增到主體中的自訂 SingleSignonToken 記號會自動新增到回應中,成為一項 HTTP Cookie,且其中會包含傳回 Web 瀏覽器的屬性。 記號介面 getName 方法與 getVersion 方法會共同定義 Cookie 名稱。 WebSphere Application Server 定義具有 LtpaToken 名稱和第 2 版的預設 SingleSignonToken 記號。 新增的 Cookie 名稱是 LtpaToken2。 請勿將敏感的資訊、機密資訊或未加密的資料新增到回應 Cookie 中。
另外建議您在使用 Cookie 的任何時候,都要利用 Secure Socket Layer (SSL) 通訊協定來保護要求。 使用 SSO 記號, Web 使用者在跨多個 WebSphere Application Server存取 Web 資源時可以鑑別一次。 自訂的 SSO 記號在單一登入實務中新增自訂處理程序來延伸這項功能。 如需 SSO 記號的相關資訊,請參閱 實作單一登入以最小化 Web 使用者鑑別。 如需如何使用及實作這個記號類型的相關資訊,請參閱 將預設單一登入記號與預設或自訂記號 Factory 搭配使用,來傳播安全屬性 和 針對安全屬性傳播實作自訂單一登入記號。
- 傳送記號
- 傳送記號與經過鑑別的使用者無關,因此,它不會儲存在主體中。 傳送記號會儲存在執行緒中,且會隨著呼叫前往任何地方。 當要求出埠送往另一部伺服器時,該執行緒中的傳送記號就會隨同要求一起傳送,並且目標伺服器會執行這些記號。 不論 Java Platform, Enterprise Edition (Java EE) 執行身分使用者切換為何,都會傳播儲存在執行緒上的屬性。
預設傳送記號會監視和記載所有使用者切換和主機切換。 您可以使用 WSSecurityHelper 應用程式設計介面 (API),將其他資訊新增到預設傳送記號中。 如果要擷取和設定傳送記號的自訂實作,您可以使用 WSSecurityPropagationHelper 類別。 如需如何使用及實作這個記號類型的相關資訊,請參閱 使用預設傳送記號來傳送安全屬性 和 實作安全屬性傳送的自訂傳送記號。
- 鑑別記號
- 鑑別記號會傳給下游伺服器,其中包含使用者的身分。 這個記號類型的功能和舊版的小型認證機構 (LTPA) 記號相同。 雖然此記號類型通常保留用於內部 WebSphere Application Server 用途,但您可以將此記號新增至「主旨」,並使用記號介面的 getBytes 方法來延伸記號。
自訂鑑別記號的用途僅在於供服務供應商將本身加入到主體時使用。 WebSphere Application Server 不會將它用於鑑別目的,因為存在用於 WebSphere Application Server 鑑別的預設鑑別記號。 服務提供者可以利用這個記號類型來識別自訂資料如何利用記號來執行自訂鑑別決策。 如需如何使用及實作這個記號類型的相關資訊,請參閱 預設鑑別記號 和 實作安全屬性傳播的自訂鑑別記號。
- Kerberos 鑑別記號
- Kerberos 鑑別記號包含 Kerberos 認證,例如,Kerberos 主體名稱、GSSCredential 和 Kerberos 委派認證。 這個記號會傳送到下游伺服器。 雖然此記號類型通常保留用於內部 WebSphere Application Server 用途,但如果它包含 GSSCredential ,您可以使用 getGSSCredential 方法來擷取 GSSCredential。 之後,您可以將它放在主體中,供您的應用程式使用。 當您使用 SPNEGO Web 或 Kerberos 鑑別向 WebSphere Application Server 進行鑑別時,會建立這個記號。
水平傳送和往下游傳送
在 WebSphere Application Server中,既可以使用水平傳送 (對 Web 要求使用單一登入) ,也可以使用下游傳送 (透過「網際網路交互 ORB 通訊協定 (RMI/IIOP)」使用「遠端方法呼叫」來存取 Enterprise Bean)。
水平傳送
在水平傳送中,會在前端伺服器之間傳送安全屬性。 已序列化的安全屬性 (也就是 Subject 內容和延伸記號)可以包含靜態和動態這兩種屬性。 單一登入 (SSO) 記號會儲存水平傳送所需要的其他特定系統專用資訊。 SSO 記號所包含的資訊會告訴接收端伺服器原始伺服器所在的位罝,以及如何與這部伺服器通訊。 此外,SSO 記號也包含查閱已序列化屬性的索引鍵。 如果要啟用水平傳送,您必須配置單一登入記號以及 Web 入埠安全屬性傳送特性。 您可以使用管理主控台來配置這兩項特性。

水平傳送的效能作用
JMX 遠端呼叫的效能作用會隨著您的環境而不同。 JMX 遠端呼叫用來取得原始登入屬性。 水平傳送會減少許多遠端使用者登錄呼叫,免得這些呼叫造成許多應用程式的效能問題。 不過,這些物件的解除序列化也可能降低效能,只是降低程度可能低於遠端使用者登錄呼叫。 建議您啟用和停用水平傳送來測試環境。 如果您必須利用水平傳送來保留原始登入屬性,請測試 JMX 是否能在您的環境中提供較好的效能。
安全快取 (WSSecureMap)
在圖 1 中,安全快取 (WSSecureMap) 是用來傳送安全屬性的動態快取。 WSSecureMap 快取會儲存用來重建使用者認證的安全屬性;它會隨登入使用者的數目來進行調整。 WSSecureMap 的預設生命期限與 LTPA 記號逾時值相同。 換言之,當使用者登出時,會釋出 WSSecureMap 快取項目。 WSSecureMap 採用一般使用型樣。
您在管理主控台中設定 WSSecureMap 快取大小。 () 並定義 com.ibm.ws.security.WSSecureMapInitAtStartup 和 com.ibm.ws.security.WSSecureMapSize ,以控管如何使用快取。
往下游傳送
在往下游傳送中,傳送登入或使用者登錄登入會在 Web 前端伺服器產生一個主體。 當同時啟用「遠端方法呼叫 (RMI)」出埠和入埠傳播時, WebSphere Application Server 會向下游傳播 Enterprise Bean 呼叫的安全資訊。
傳送安全屬性的好處
WebSphere Application Server 的安全屬性傳播特性有下列好處:
讓 WebSphere Application Server 能夠使用安全屬性資訊來進行鑑別和授權。 傳送安全屬性就不需要在沿著呼叫的每個遠端躍點上呼叫使用者登錄。 舊版 WebSphere Application Server 只會傳播已鑑別使用者的使用者名稱,但會忽略其他需要利用遠端使用者登錄呼叫在下游重新產生的安全屬性資訊。 為了突顯這個新功能的好處,請考慮下列範例:
在舊版中,您可以使用反向 Proxy 伺服器(RPSS,如 WebSEAL)來鑑別使用者、收集群組資訊,以及收集其他安全屬性。 如先前所述, WebSphere Application Server 接受已鑑別使用者的身分,但不處理其他安全屬性資訊。 如果要建立包含所需 WSCredential 和 WSPrincipal 物件的 Java 鑑別和授權服務 (JAAS) 主體, WebSphere Application Server 會對使用者登錄發出 5 到 6 個呼叫。 WSCredential 物件包含授權 Java EE 資源所需的各種安全資訊。 WSPrincipal 物件包含網域範圍名稱和代表主體的主體之使用者。
在現行版本的「應用程式伺服器」中,從反向 Proxy 伺服器取得的資訊可供 WebSphere Application Server 使用,並延伸到下游其他伺服器資源,而不需要額外呼叫使用者登錄。 保留安全屬性資訊可讓您適當地保護伺服器資源,方法是進行適當的授權和信任型決策由於 Java EE 執行身分配置而發生的使用者切換,不會導致應用程式伺服器失去原始呼叫端資訊。 這項資訊會儲存在執行中的執行緒其中的 PropagationToken。
- 使協力廠商能夠外掛自訂記號。 記號介面包含一個 getBytes 方法,其可讓記號的實作用來定義自訂序列化、加密方法或兩者。
- 可讓由不同提供者所建立的單一主題內包含多個同類型的記號。 WebSphere Application Server 可以基於相同目的處理多個記號。 例如,主題中可以有多個授權記號,各個記號可以有不同提供者所產生的不同授權屬性。
- 可讓每一個記號類型具有其唯一 ID,以形成更唯一的主題 ID(而不只是使用者名稱),以免動態屬性造成使用者登入環境定義的改變。 記號類型有一個 getUniqueId() 方法,用來傳回快取所用的唯一字串。 比方說,您可能需要傳送位置 ID 來指出使用者從中登入系統的位置。 在原始登入期間,可以利用反向 Proxy 伺服器或 WEB_INBOUND 登入配置來產生這個位置 ID,並在序列化之前將它新增到主題中。 其他屬性也可以加到主題中及使用唯一 ID。 所有唯一 ID 都必須考量,才能產生唯一的主題。 WebSphere Application Server 能夠指定「主題」中資訊的唯一內容,這可能會影響使用者稍後存取「主題」的方式。