您可以配置 Liberty 伺服器,以針對出埠 SPNEGO 記號提供 Kerberos 受限委派支援。
開始之前
請確定您已配置 SPNEGO Web 鑑別。
只支援 IBM® JDK 1.8 及更新版本。
關於這項作業
稱為 S4U(Services for Users,使用者服務)的 Kerberos 第 5 版延伸即所謂的受限委派,由下列兩個組件組成:
- S4U2self
容許 Liberty 伺服器代表使用者取得通往其本身的服務通行證。這可搭配 Liberty 支援的任何鑑別形式。S4U2self 是「Kerberos 通訊協定轉移」的延伸。
- S4U2proxy
容許 Liberty 伺服器代表使用者取得通往授信服務的服務通行證。這些服務通行證是利用使用者通往 Liberty 服務的服務通行證取得。這些服務受限於「Kerberos 金鑰配送中心 (KDC)」管理者。S4U2proxy 是「Kerberos 受限委派」的延伸。
受限委派特性提供下列 API,為支援 SPNEGO 鑑別的後端服務(例如:.NET 伺服器和其他
Liberty 伺服器)建立出埠 SPNEGO 記號。
- S4U2self API:com.ibm.websphere.security.s4u2proxy.SpnegoHelper.buildS4U2proxyAuthorizationUsingS4U2self()
- S4U2proxy API:com.ibm.websphere.security.s4u2proxy.SpnegoHelper.buildS4U2proxyAuthorization()
下列步驟使用的範例系統設定,與在 Liberty 中配置 SPNEGO 鑑別中所用和 使用 SPNEGO Web 鑑別針對 HTTP 要求進行單一登入中所說明的相同。
程序
- 在 Microsoft 網域控制器 myAdMachine.example.com 中,更新您用來驗證送入 SPNEGO 記號的服務主體名稱 (SPN)。例如,依如下所示來更新
HTTP/myLibertyMachine.example.com SPN:
- 如果要使用 S4U2self,請執行下列步驟:
- 開啟對映至委派 SPN 的使用者帳戶。
- 開啟「屬性編輯器」標籤。
- 依如下所示修改 userAccountControl 內容:
- 授信鑑別委派 (0x1000000, or the TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION
enum) 必須是 true。
- 設定授信服務:
- 以使用者帳戶開啟「委派」標籤。
- 選取只信任這個使用者委派給指定的服務圓鈕。
- 選取使用任何鑑別通訊協定圓鈕。
- 按一下新增,以新增授信服務。
- 按一下使用者或電腦。
- 輸入用於授信服務的 SPN。
- 按一下檢查名稱,並驗證已找到適當的物件名稱。
- 按一下確定。
- 選取指定的 SPN,並按一下確定。
- 如果要使用 S4U2proxy,請執行下列步驟:
- 開啟對映至委派 SPN 的使用者帳戶。
- 開啟「屬性編輯器」標籤。
- 依如下所示修改 userAccountControl 內容:
- 授信鑑別委派 (0x1000000, or the TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION
enum) 必須是 true。
- 設定授信服務:
- 以使用者帳戶開啟「委派」標籤。
- 選取只信任這個使用者委派給指定的服務圓鈕。
- 按一下新增,以新增授信服務。
- 按一下使用者或電腦。
- 輸入用於授信服務的 SPN。
- 按一下檢查名稱,並驗證已找到適當的物件名稱。
- 按一下確定。
- 選取指定的 SPN,並按一下確定。
- 在 Liberty 伺服器機器 (myLibertyMachine.example.com) 上,將 constrianedDelegation-1.0 新增至 featureManager 來啟用受限委派特性,並且在 server.xml 檔中配置 JAAS Kerberos 登入模組。
<featureManager>
<feature>spnego-1.0</feature>
<feature>contrainedDelegation-1.0</feature>
...
</featuremanager>
<jaasLoginContextEntry id="com.ibm.security.jgss.krb5.accept" name="com.ibm.security.jgss.krb5.accept" loginModuleRef="useKeytab" />
<jaasLoginModule id="useKeytab" className="com.ibm.security.auth.module.Krb5LoginModule" controlFlag="REQUIRED" libraryRef="jaasSharedLib">
<options
credsType="both"
debug="true"
useDefaultCcache="false"
tryFirstPass="true"
forwardable ="true"
principal="HTTP/myLibertyMachine.example.com"
useKeytab="${server.config.dir}/resources/security/kerberos/krb5.keytab">
</options>
</jaasLoginModule>
<library id="jaasSharedLib" apiTypeVisibility="spec, ibm-api, api">
<fileset dir="${server.config.dir}/lib/global/" includes="*" />
</library>
一旦啟用
constrainedDelegation-1.0 特性,下列配置是隱含的:
<constrainedDelegation id="defaultConstrainedDelegation" s4U2selfEnabled="false" />
如果要使用
S4U2self,需要在
server.xml 檔中提供下列配置:
<constrainedDelegation s4U2selfEnabled = "true" id="defaultConstrainedDelegation"/>
註: 當您使用 S4U2proxy API 時,不能改變 jaasLoginContextEntry 的 ID 和名稱 com.ibm.security.jgss.krb5.accept。
註: 依預設,會啟用 S4U2proxy,並停用 S4U2self。您可以修改 server.xml 檔中的 s4U2selfEnabled 屬性,來啟用或停用 S4U2self 延伸。
結果
現在,您的應用程式可準備呼叫受限委派特性所提供的 API。