可通过对 WebSphere® Application Server
Liberty 使用简单且受保护的 GSS-API 协商机制 (SPNEGO) Web 认证以将单点登录用于 HTTP 请求。SPNEGO
单点登录允许 HTTP 用户只在其桌面登录 Microsoft® 域控制器一次就可通过 Liberty 服务器实现单点登录 (SSO)。
开始之前
配置以下软件以确保它可用:
- 正在运行 Active Directory 域控制器和关联 Kerberos 密钥分发中心 (KDC) 的 Microsoft Windows®
Server。对于本主题,这类域控制器的示例主机为 myAdMachine.example.com。域控制器名称为 mydomain.example.com,Kerberos 域名为
MYDOMAIN.EXAMPLE.COM,这是字母全大写的域控制器名称。
- 按 IETF RFC 2478 中的定义支持 SPNEGO 认证机制的 Microsoft Windows®
域成员(客户机)。相应客户机的示例可能包括现代浏览器或 Microsoft .NET
客户机。大部分现代浏览器支持 SPNEGO 认证。对于本主题,此客户机的示例主机为 myClientMachine.example.com。
- Liberty 服务器(其应用程序内包含受保护资源)的服务器平台。Active Directory 中的用户必须能够使用本机 Liberty 服务器认证机制访问 Liberty 服务器的受保护资源。对于本主题,示例 Liberty 服务器主机为
myLibertyMachine.example.com。
注: 软件配置必须具有正运行的域控制器,该域中至少有一个客户机,以及配备 Liberty 服务器(其应用程序内包含受保护资源)的服务器平台,即,总共三台必需机器。不支持直接从域控制器使用
SPNEGO。
注: 确保客户机、Microsoft Active
Directory 服务器和 Liberty 服务器的时钟同步不超过 5 分钟(缺省情况下)。同步中的可允许时差是可配置的。
注: 当前仅支持 IBM® JDK。不支持非 IBM JDK。
关于此任务
此任务的目标是允许用户成功访问 Liberty 服务器资源而不必再次认证,从而实现 Microsoft Windows®
桌面单点登录功能。
此任务说明如何配置 Liberty 服务器以支持将单点登录用于 HTTP 请求(通过使用 SPNEGO Web 认证)。
过程
- 在 Microsoft
域控制器 (myAdMachine.example.com) 上,为 Liberty 服务器创建 Kerberos 服务主体名称 (SPN) 和密钥表文件。
- 创建 Liberty 服务器的用户帐户。此帐户用于映射到 Kerberos 服务主体名称 (SPN)。对于 Active Directory 机器,此帐户创建通常可通过以下方法来完成:转至,在面板上右键单击用户,然后选择。本主题假定将创建用户
myLibertyMachine_http,其密码为 security。
- 运行 Microsoft setspn
命令以将该用户帐户映射至 Kerberos SPN。此用户帐户将 Liberty 服务器表示为带有 KDC 的 Kerberos 服务。 setspn 命令的示例:
C:\> setspn -a HTTP/myLibertyMachine.example.com myLibertyMachine_http
Registering ServicePrincipalNames for CN=myLibertyMachine_http,CN=Users,DC=MYDOMAIN,DC=EXAMPLE,DC=COM
HTTP/myLibertyMachine.example.com
Updated object
注: 如果您的 Microsoft setspn
命令版本支持 -S 选项,那么必须使用 -S 选项而不是 -A 选项。
- 使用 Microsoft ktpass 工具创建 Kerberos 密钥表文件。此文件的缺省名称为 krb5.keytab。
ktpass 命令的示例:
C:\> ktpass -out krb5.keytab -princ HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM -mapUser myLibertyMachine_http -mapOp set -pass security -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL
Targeting domain controller: myAdMachine.MYDOMAIN.EXAMPLE.COM
Using legacy password setting method
Successfully mapped HTTP/myLibertyMachine.example.com to myLibertyMachine_http.
Key created.
Output keytab to krb5.keytab:
Keytab version: 0x502
keysize 93 HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0x148d643db283327d3f3d44547da8cade)
使用下列其中一个命令确保 Microsoft 林中没有重复的 SPN:
- 如果您的 Microsoft setspn
命令版本支持 -X 选项搜索重复 SPN,请使用 setspn -X:
C:\>setspn -X HTTP/myLibertyMachine.example.com
Processing entry 0
found 0 group of duplicate SPNs.
- 还可使用 Microsoft ldif 命令。以下示例显示返回了一个条目,指示没有重复 SPN。
C:\>ldifde -f check_SPN.txt -t 3268 -d "" -l servicePrincipalName -r "
(servicePrincipalName=HTTP/myLibertyMachine.example.com)" -p subtree
Connecting to "myAdMachine.MYDOMAIN.EXAMPLE.COM"
Logging in as current user using SSPI
Exporting directory to file check_SPN.txt
Searching for entries...
Writing out entries.
1 entries exported
有关在不同 KDC 系统上创建 SPN 和密钥表文件的信息,请参阅创建
Kerberos 服务主体名称和密钥表文件。
- 在 Liberty 服务器 (myLibertyMachine.example.com) 上,启用 Kerberos 密钥表和配置文件及 SPNEGO Web 认证。
- 将域控制器中的 Kerberos 密钥表文件复制到 Liberty 服务器。此文件的缺省名称为
krb5.keytab,缺省位置随平台不同而变化,但与 Kerberos 配置文件位于同一目录。有关各种平台的缺省位置,请参阅下一步。
- 创建 Kerberos 配置文件。
Kerberos 配置文件包含客户机配置信息。此信息包括相关领域的 KDC 的位置,当前 Kerberos 领域的缺省值,以及主机名到 Kerberos
领域的映射。对于 Liberty 服务器,您必须手动创建此文件。
以下是 AIX、z/OS、HP-UX 或 Solaris 平台的样本 Kerberos 配置文件(基于缺省密钥表位置):
[libdefaults]
default_realm = MYDOMAIN.EXAMPLE.COM
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = rc4-hmac
default_tgs_enctypes = rc4-hmac
forwardable = true
renewable = true
noaddresses = true
clockskew = 300
udp_preference_limit = 1
[realms]
MYDOMAIN.EXAMPLE.COM = {
kdc = myAdMachine.example.com:88
default_domain = example.com
}
[domain_realm]
.example.com = MYDOMAIN.EXAMPLE.COM
注: 域名通常以大写字母指定。如果您使用的是 Microsoft Active Directory,那么领域名称必须为大写。
注: 不是所有可用 KDC 解决方案支持所有加密类型。在选择加密类型前,请参阅《Kerberos 管理员和用户指南》以确保 KDC 支持您要使用的加密类型。
确保您具有适用于 Kerberos 配置文件、Kerberos 密钥表文件、Kerberos SPN 和 Kerberos 客户机的通用加密类型。例如,如果 Kerberos
客户机使用 RC4-HMAC 加密类型,那么目标服务器必须也支持 RC4-HMAC
加密类型,并且 Kerberos 配置文件必须在 default_tgt_enctypes 和 default_tkt_enctypes 参数中先列示 RC4-HMAC。
有关此文件内容的更多信息和要求,请参阅创建 Kerberos 配置文件。
- 验证 Kerberos 配置文件和密钥表文件。
执行 kinit 命令后,可使用 klist 命令列示 Kerberos 凭单。如果您获得 Kerberos
凭单,那么说明 Kerberos 密钥表和配置有效。
- 在 Liberty 服务器上配置并启用 SPNEGO Web 认证。
可通过启用 Liberty 的 spnego-1.0 功能部件来启用 SPNEGO Web 认证。
- 将 spnego-1.0 功能部件添加至 server.xml 文件。
<featureManager>
<feature>spnego-1.0</feature>
<feature>appSecurity-2.0</feature>
...
</featuremanager>
添加 spnego-1.0
功能部件会自动实施某个最低配置。不必在 server.xml 文件中指定 <spnego> 元素。如果未指定
<spnego> 元素,那么以下配置是隐式的。
<spnego
canonicalHostName="true"
disableFailOverToAppAuthType="true"
trimKerberosRealmNameFromPrincipal="true"
includeClientGSSCredentialInSubject="true" />
注: 运行时形成以下格式的缺省 SPN:
"HTTP/" + java.net.InetAddress.getLocalHost().getCanonicalHostName();
如果缺省 SPN 与 krb5.keytab 文件中的内容不匹配,那么您需要指定 servicePrincipalNames,例如:
<spnego id="mySpnego" servicePrincipalNames="HTTP/myLibertyMachine.example.com"/>
注: 如果已启用
spnego-1.0 功能部件并且 <spnego> 元素被省略或未对其配置 authFilterRef 属性,那么要访问受保护资源的所有请求使用 SPNEGO 认证。
有关配置认证过滤器的更多信息,请参阅认证过滤器。
注: 如果未给定
krb5Config 或 krb5Keytab 属性值,那么每个相应文件应在其缺省位置。本示例之前给出了 Kerberos 配置文件和密钥表文件在各个平台上的缺省位置。
- 可选:必要时指定所有附加配置选项。Liberty 支持许多常见 SPNEGO 方案和配置。例如,可过滤 HTTP
请求以仅要求对某些请求、Web 应用程序、主机或用户代理使用 SPNEGO 认证。而且,还可将 Kerberos 配置文件和密钥表文件从其相应缺省位置移开。以下是更改缺省 <spnego> 设置的样本配置:
<server>
<featureManager>
<feature>spnego-1.0</feature>
<feature>appSecurity-2.0</feature>
...
</featureManager>
...
<authFilter id="myAuthFilter">
<host id="myHost" name="example.com" matchType="contains" />
<webApp id="myWebApp" name="protectedApp" matchType="equals" />
</authFilter>
<spnego id="mySpnego"
includeClientGSSCredentialInSubject="false"
krb5Config="${server.config.dir}/resources/security/kerberos/krb5.conf"
krb5Keytab="${server.config.dir}/resources/security/kerberos/krb5.keytab"
servicePrincipalNames="HTTP/myLibertyMachine.example.com"
authFilterRef="myAuthFilter" />
</spnego>
...
</server>
根据此配置,对于 Web 应用程序 protectedApp 内的资源,系统将对所接收的所有包含主机名 example.com 的请求使用 SPNEGO 认证。此外,成功认证时,客户机的 GSS
凭证不会添加至用户主体集。最后,系统对服务器要使用的 Kerberos 配置文件和密钥表文件指定服务器配置目录内的特定位置(而不是指定其相应缺省位置)。
有关更多配置选项,请参阅简单且受保护的
GSS-API 协商机制 (SPNEGO)。
有关将 Kerberos 主体名称映射至 WebSphere
用户注册表标识的信息,请参阅将客户机
Kerberos 主体名称映射至 WebSphere 用户注册表标识。
如果出现将 Kerberos
主体名称用于授权的极少数情况,请参阅将 Kerberos 主体名称与 SPNEGO 认证配合使用以进行授权。仅当需要时才应执行这些步骤,并由明确选择不使用缺省映射或 JASS 定制登录模块映射的用户执行。
- 在客户机应用程序机器 (myClientMachine.example.com) 上配置客户机应用程序。
以下步骤只能在客户端机器上完成。在 Active Directory 机器或 Liberty 服务器上启动浏览器并执行这些步骤时不起作用。
以下步骤适用于从浏览器访问受 SPNEGO 保护的资源的用户。您必须已安装支持 SPNEGO 认证的浏览器。
Microsoft Internet Explorer:
- 在桌面上登录 Windows Active Directory 域。
- 在 Internet Explorer 窗口中,单击。在所显示的窗口中,单击安全选项卡。
- 选择本地 Intranet 图标并单击站点。
- 如果您使用的是 Internet Explorer V9 或更低版本,请转至下一步。如果您使用的是 Internet Explorer 10 或更高版本,请在“本地 Intranet”窗口中单击高级。
- 在“本地 Intranet”窗口中,使用主机名的 Web 地址填写将该网站添加到区域字段,以便可对网站字段中显示的网站列表启用单点登录 (SSO)。您的站点信息技术人员应提供此信息。关闭第二个“本地 Intranet”窗口,然后单击确定以完成此步骤并关闭“本地 Intranet”窗口。
- 在“Internet 选项”窗口上,单击高级选项卡并滚动至“安全”设置。确保启用集成 Windows® 验证框已选中。
- 单击确定。重新启动 Microsoft Internet Explorer 以激活此配置。
Mozilla Firefox:
- 在桌面上登录 Windows Active Directory 域。
- 在 Firefox 的地址字段中,输入 about:config。
- 在“过滤/搜索”框中,输入 network.n。
- 双击 network.negotiate-auth.trusted-uris。此首选项列示允许使用此浏览器进行 SPNEGO
认证的站点。输入可信域或 URL 的逗号定界列表。
注: 必须设置 network.negotiate-auth.trusted-uris 的值。
- 如果所部署 SPNEGO 解决方案使用高级 Kerberos 功能部件“凭证授权”,请双击 network.negotiate-auth.delegation-uris。此首选项列示该浏览器可将其用户授权委托给服务器的站点。输入可信域或 URL 的逗号定界列表。
- 单击确定。此配置将反映更新。
- 重新启动 Firefox 浏览器以激活此配置。
注: 用户必须登录域控制器才能使 SPNEGO 生效。通过使用先前的示例机器,用户必须登录位于 MYDOMAIN.EXAMPLE.COM\username 的域控制器以使通过浏览器进行的 SPNEGO 认证生效。
注: 如果系统多次提示您输入用户标识和密码,请确保您已遵循先前的指示信息在客户机浏览器上启用了 SPNEGO 支持。还必须确保 <spnego>
配置中的 disableFailOverToAppAuthType 属性设置为 false。
结果
互联网浏览器现在已适当配置以进行 SPNEGO 认证。您可使用部署在
Liberty 服务器上具有受保护资源的应用程序,而不会收到要求您输入用户标识和密码的提示。
要验证 SPNEGO
是否工作,可登录域控制器然后访问 Liberty 服务器上的受保护资源,因为您已登录域控制器,所以系统不会提示您输入凭证。但是,如果您未登录域控制器并尝试访问受保护资源,那么系统会提示您输入凭证。