可配置 Liberty 服务器以支持对出站 SPNEGO 令牌的 Kerberos 约束委派。
开始之前
确保您已配置 SPNEGO Web 认证。
仅 IBM® JDK 1.8 及更高版本受支持。
关于此任务
名为 S4U(针对用户的服务)的 Kerberos V5 扩展(又称为约束委派)由两个部分组成:
- 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 或 TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION enum)的信任必须为 true。
- 设置可信服务:
- 在用户帐户中打开“授权”选项卡。
- 选中信任此用户以仅对指定服务授权单选按钮。
- 选中使用任意认证协议单选按钮。
- 单击添加以添加可信服务。
- 单击用户或计算机。
- 输入要用于可信服务的 SPN。
- 单击检查名称并验证是否找到相应对象名。
- 单击确定。
- 选择所指定 SPN 并单击确定。
- 要使用 S4U2proxy,请执行以下步骤:
- 打开映射至授权 SPN 的用户帐户。
- 打开“属性编辑器”选项卡。
- 按如下所示修改 userAccountControl 属性:
- 对认证授权(0x1000000 或 TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION enum)的信任必须为 true。
- 设置可信服务:
- 在用户帐户中打开“授权”选项卡。
- 选中信任此用户以仅对指定服务授权单选按钮。
- 单击添加以添加可信服务。
- 单击用户或计算机。
- 输入要用于可信服务的 SPN。
- 单击检查名称并验证是否找到相应对象名。
- 单击确定。
- 选择所指定 SPN 并单击确定。
- 在 Liberty 服务器 (myLibertyMachine.example.com) 上,通过在 server.xml 文件中将
constrianedDelegation-1.0 添加至 featureManager 并配置 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 和 name com.ibm.security.jgss.krb5.accept 不能更改。
注: 缺省情况下,将启用
S4U2proxy 并禁用 S4U2self。可通过在 server.xml 文件中修改 s4U2selfEnabled 属性来启用或禁用
S4U2self 扩展。
结果
现在,您的应用程序已准备好调用由约束委派功能部件提供的 API。