這個主題說明如何建立您自己的鑑別記號實作,這是在登入主題中設定,並延伸到下游。
關於這項作業
使用此實作,您可以指定可供自訂登入模組或應用程式使用的鑑別記號。 如果您想要完成下列其中一項作業,請考慮撰寫您自己的實作:
- 在您自己的實作內隔離您的屬性。
- 使用自訂序列化來序列化資訊。 您必須將目標上的位元組解除序列化,並將該資訊新增回執行緒上。 這項作業也可能包含加密和解密。
- 使用 getUniqueID 應用程式設計介面 (API) 來影響主題的整體唯一性。
重要事項: WebSphere® Application Server 中的安全執行時期不會使用自訂鑑別記號實作來施行鑑別。 WebSphere Application Security 執行時期僅在下列狀況中使用此記號:
- 呼叫 getBytes 方法以進行序列化
- 請呼叫 getForwardable 方法來決定是否要序列化鑑別記號。
- 呼叫 getUniqueId 方法以取得唯一性
- 呼叫 getName 和 getVersion 方法,將序列化位元組新增至下游傳送的記號保留元
所有其他用途都是自訂實作。
若要實作自訂鑑別記號,您必須完成下列步驟:
程序
- 撰寫 AuthenticationToken 介面的自訂實作。
有許多不同的方法可用來實作 AuthenticationToken 介面。 不過,請確定 AuthenticationToken 介面和記號介面所需的方法已完全實作。 實作此介面之後,您可以將它放置在
app_server_root/classes 目錄中。 或者,您可以將類別放在任何專用目錄中。 不過,請確定 WebSphere Application Server 類別載入器可以找到類別,且已授與適當的許可權。 您可以將包含此類別的 Java™ 保存檔 (JAR) 或目錄新增至
server.policy 檔,使類別具備伺服器程式碼所需的必要許可權。
提示: 傳播架構所定義的所有記號類型都有類似的介面。 記號類型是實作 com.ibm.wsspi.security.token.Token 介面的標記介面。 這個介面定義大部分方法。 如果您計劃實作多個記號類型,請考慮建立一個抽象類別來實作 com.ibm.wsspi.security.token.Token 介面。 所有記號實作 (包括鑑別記號) 可能會延伸抽象類別,然後大部分工作完成。
如果要查看 AuthenticationToken 介面的實作,請參閱 範例 :com.ibm.wsspi.security.token.AuthenticationToken 實作。
- 在 WebSphere Application Server 登入期間新增及接收自訂鑑別記號。
這項作業通常是透過將自訂登入模組新增至各種應用程式和系統登入配置來達成。 不過,如果要解除序列化資訊,您必須外掛自訂登入模組。 在登入模組中實例化物件之後,您可以在確定方法期間將物件新增至 Subject。
如果您只想將資訊新增至「主題」來進行傳播,請參閱 傳播安全屬性的自訂 Java 序列化物件。 如果您要確保傳播資訊、執行您自己的自訂序列化,或指定唯一性以進行主體快取,請考量撰寫您自己的鑑別記號實作。
範例: 自訂鑑別記號登入模組中的程式碼範例顯示如何判斷登入是起始登入還是傳播登入。 這些登入類型之間的差異在於 WSTokenHolderCallback 回呼是否包含傳播資料。 如果回呼不包含傳送資料,請起始設定新的自訂鑑別記號實作,並將它設為「主體」。 如果回呼包含傳播資料,請尋找您的特定自訂鑑別記號 TokenHolder 實例,將位元組陣列轉換回您的自訂 AuthenticationToken 物件,並將它設回 Subject。 程式碼範例會顯示這兩個實例。
您可以在登入模組的確定階段中,將鑑別記號設為唯讀。 如果您未將記號設為唯讀,則可以在應用程式內新增屬性。
- 將自訂登入模組新增至已包含 com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule 登入模組的 WebSphere Application Server 系統登入配置,以接收自訂授權記號的序列化版本。
由於這個登入模組依賴 com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule 登入模組所新增之共用狀態的資訊,因此,請在 com.ibm.ws.security.server.lm.wsMapDefaultInboundLoginModule 登入模組之後新增這個登入模組。 如需如何將自訂登入模組新增至現有登入配置的相關資訊,請參閱開發 JAAS系統登入配置的自訂登入模組。