测试驱动的单点登录

如何通过单点登录访问多个系统和服务!

本文介绍了如何在 IBM i 平台上设置单点登录 (SSO)。SSO 允许您登录到主工作站,之后无需再次登录即可访问其他系统和应用程序。您将了解如何设置所有必要的软件,以及如何在执行后续步骤之前,先验证每一个步骤是否已正确完成。之后,您不必再逐次登录,即可使用 5250 Emulation、NetServer、IBM System i Navigator、IBM WebSphere® Application Server 和 Java™ Toolbox 访问 IBM i 系统。请注意,有多个不同的组件必须协同工作,因此实现 SSO 所需的时间取决于您对各个组件的熟悉程度,但通常都得花几天来完成。

Tosh Bimbra, PartnerWorld for ISVs IBM i 技术支持, IBM

toshTarlochan (Tosh) Bimbra 是 IBM PartnerWorld® for ISVs IBM i 技术支持团队和 IBM i 全球支持中心语言/实用工具团队的负责人。他关注的技术领域包括 Rational Developer for Power、Java、WebSphere 和 IBM i 编译器。他拥有 20 年的 IBM i(i5/OS、iSeries、AS/400)客户支持经验。在业余时间,他喜欢传授印度传统音乐、印度斯坦语音乐,他也是一名出色的羽毛球赛手。



Jim Ahrens, PartnerWorld for ISVs IBM i 技术支持, IBM

bioJim Ahrens 在 IT 业内拥有接近 20 年的经验。Jim 至今已在 PartnerWorld for Developers 工作了 11 年,利用其 DB、Domino、WebSphere、Apache、Java 和其他通用的 IBM i 技能为 IBM i 独立软件供应商提供支持。Jim 喜爱威斯康星州北部中心地区偏僻之处的户外生活,喜爱打篮球,以及骑他的美国胜利摩托车。



Dan Reusche, PartnerWorld for ISVs IBM i 技术支持, IBM

Dan ReuscheDan Reusche 在 IBM i 平台领域拥有 24 年的丰富经验,自 1987 年就开始从事相关工作,当时的 IBM i 平台仍然处于开发之中。Dan 从事过开发、IBM 内部生产级 system i 管理与编程、语言和实用工具、电子邮件和 Web 服务方面的工作,以及位于明尼苏达州罗切斯特的 IBM i 全球支持中心的 PartnerWorld 团队。在业余时间,他喜爱使用 Windows 和 Linux PC 进行工作、做木工、骑摩托车。



Dave Robertson, PartnerWorld for ISVs IBM i 技术支持, IBM

bioDave Robertson 在 IT 业内拥有超过 41 年的经验。他中期的经验从 1982 年开始,当时他担任 S/38 的数据处理经理。他曾担任过 IBM i 的开发人员、合同程序员,担任目前的技术支持职位已有 11 年的历史。除了编写程序之外,他还热爱撰写科幻小说。



2012 年 7 月 09 日

先决条件

查阅《基于 Windows 的单点登录》红皮书

尽管以下 IBM Redbooks® 红皮书资料发布于 2004 年,但我们还是建议读者先通读这些资料,再尝试配置 SSO。我们认为这些文档非常重要、非常有用,并且我们确信读者也会发现这一点。

Windows-based Single Signon and the EIM Framework on the IBM Eserver iSeries Server

请特别注意第 2 章 “规划 Network Authentication Service 和 Enterprise Identity Mapping 的实现”。这一章是成功实现 SSO 的关键所在。第 2 章中给出几个重点是必要的先决条件的组成部分,另外还应注意第 2.4 节规划工作表。不要低估规划工作表 (Planning Worksheet) 的价值。附录 D 给出了一个空白的规划工作表,以供读者使用。

下面给出了规划单点登录时应参考的两个链接,其中包含上述红皮书资料中缺少的最新信息。

配置单点登录环境的需求

单点登录规划工作表

下面给出了我们使用的规划工作表,有助于理解本文中给出的示例和图释。

规划工作表
项目
规划工作表
结果
A iSeries 所属的 Kerberos 默认领域的名称是什么? RCHPWDI.COM
B 这个 Kerberos 默认领域的 KDC 是什么? TOSHW2003
C KDC 的完全限定主机名称是什么? TOSHW2003.RCHPWDI.COM
D KDC 侦听的端口是什么? 88 - 默认
E 这个 KDC 的密码服务器的名称是什么? 与上面的 B 相同
F 密码服务器的端口是什么? 464 - 默认
G iSeries 的服务主体名称是什么?
pwd1sup
在 KDC 上创建 iSeries 主体时,应该使用以下项
H Kerberos 主体的名称是什么?
krbsvr400(创建
iSeries 主体时必须使用这个名称)
I iSeries 的主机名是什么? RCHASSMB
J iSeries 的完全限定主机名是什么? RCHASSMB.RCHLAND.IBM.COM
K iSeries 服务器所属的 Kerberos 默认领域的名称是什么?
(默认:域名转换为大写字母)
RCHPWDI.COM
L 主体的完整名称是什么?
(krbsvr400/fully.qualified.host.name@YOUR.KERBEROS.REALM)
krbsvr400/rchassmb.rchland.ibm.com@RCHPWDI.COM
M 这个主体的密码/共享密钥是什么?
(必须与 G 项相同)
pwd1sup
以下几项将用于配置企业身份映射 (Enterprise Identity Mapping, EIM)
N 您希望在 IBM i 系统上创建哪种类型的基本 EIM 配置?
加入现有域
创建并加入新域
创建并加入新域
O 您希望在何处配置 EIM 域,或者您希望加入哪个 EIM 域? rchassmb.rchland.ibm.com
P 您希望创建或者加入的 EIM 域的名称是什么? PWDEIM
Q 您是否希望为 EIM 域指定一个父 DN?
如果是,请指定父 DN
R 将用作 EIM 域控制器上 LDAP 服务器中的管理员识别名称 (DN) 是什么? cn=administrator
S 将用作 EIM 域控制器的 LDAP 服务器中的管理员密码是什么? pwd1sup

我们还发现,在演示所有 Kerberos 组件如何协同工作来执行 Kerberos 网络解决方案时,第 4.2 节 “Kerberos 协议提供的组件”(图 4-1)也是非常有帮助的。

图 1. Kerberos 组件
图表显示 Kerberos Key Distribution Center 或 KDC 处理用户对于票据授予票据的请求,以便从票据授予服务器获得票据,来访问系统中的服务

点击查看大图

图 1. Kerberos 组件

图表显示 Kerberos Key Distribution Center 或 KDC 处理用户对于票据授予票据的请求,以便从票据授予服务器获得票据,来访问系统中的服务

选择一种加密方法

最初,Kerberos 仅支持 DES 和 Triple-DES 加密。目前不再建议使用 DES,因此 PTF 增加了对于较新加密类型 AES128、AES256 和 RC4 的支持,以及对 QSYSINC 中新 KRB5 头文件的支持。

V7R1 SI42919,SI42919

V6R1 SI42957,SI42957

V5R4 SI43034,SI43034

如果您希望使用这些 PTF 提供的新型加密方法之一,则必须修改 NAS 向导创建的批处理文件,因为其默认为使用 DES。有关详细信息以及说明,请参见 PTF Cover Letter。

Active Directory

如果尚未设置 Active Directory,请按照 Microsoft 提供的这些说明来安装和创建 Active Directory。

如何 在 Windows Server 2003 上安装 Active Directory

如何 在 Windows Server 2003 中创建 Active Directory 服务器

如何 在 Windows Server 2008 上安装 Active Directory

如果您已经设置了 Active Directory,请联系 Microsoft® Windows® 管理员,确定其是否设置了特定的目录结构,以及希望存放 Kerberos 服务帐户的位置。如果是,请参阅本文末尾处自定义 AD 批处理文件的部分。

从客户端工作站加入 Windows 域

注意:本示例使用运行 Windows Server 2003 的系统,将 Active Directory 作为 Kerberos 领域的 Key Distribution Center (KDC),因此初始登录所用的客户端系统必须能够加入 Windows 域。

并非意味着客户端必须运行 Windows,我们也设置了一个 openSuSE v 11.1 工作站,作为 Kerberos 领域中的主登录点。YaST 是针对 openSuSE 和 SuSE Linux® Enterprise 发行版的安装和配置工具,它包含 Kerberos 设置向导。使用其工具能够在登录时允许 Linux 联系 Active Directory、获取票据授予票据 (ticket granting ticket),并访问 IBM i 上其他启用了 Kerberos 的资源(例如 HTTP 服务器)。我们还使用本文中包含的样例 Java 代码,与 IBM i 之间创建了启用 Kerberos 的 JDBC 连接。每个 Linux 发行版都可能有所不同,因此您必须在互联网中搜索有关配置您的 Linux 发行版的文章,以便将其作为主工作站加入 Kerberos 领域。

Windows 域就是共享一个中心目录数据库的多台计算机的逻辑组。这个中心数据库在 Windows 2000 和 Windows Server 2003 中称为 Active Directory,在 Windows Server 2008 和 Server 2008 R2 中称为 Active Directory 域服务,在 Windows NT 操作系统中称为 NT Directory Services (NTDS)。它包含了该域内资源的用户帐户和安全性信息。在一个域中,使用计算机的每一名人员都会得到自己惟一的帐户,即用户名。随后可以为这个帐户指派对该域中资源的访问权限。

在域中,目录位于配置为 “域控制器” 的计算机中。域控制器就是一台服务器,它管理着用户与域之间交互的所有安全性相关方面,集中处理安全性与管理。Windows Server 域通常适合使用 10 台以上 PC 的企业和/或组织。

希望加入域安全性的工作站和服务器需要成为域成员。加入域安全性往往也称为单点登录,简写为 SSO。

下面这个链接描述了使工作站加入一个 Windows 域时必须遵循的流程:

Windowsnetworking


执行 IBM i 任务

轻量级目录访问协议

LDAP 服务器必须支持 EIM 要求的特殊对象类和属性,这些类和属性是 IBM Tivoli LDAP 服务器的一部分。例如,AD 和 OpenLDAP 不具备这些模式扩展。

在我们的示例中,我们选择在 IBM i 上实现。

IBM Tivoli Directory Server for i5/OS (LDAP)

所选的 LDAP 服务器仅需在此时运行并保持可访问。无需进行进一步配置。

在本文中,您将在通过 System i Navigator 运行 EIM 配置向导时完成 LDAP 服务器的 EIM 配置。

讨论 EIM 配置向导的知识库文章指出,LDAP 管理员 DN 应在 EIM 向导内输入 LDAP 管理员以及 IBM i EIM 系统用户 DN 的屏幕中指定。尽管这种做法便于遵循和设置,
但从安全性和管理的角度来看,这无疑是一种糟糕的做法。LDAP 管理员通常属于应该定期更改密码的帐户(例如 QSECOFR)。然而,如果您使用 LDAP 管理员作为 IBM i EIM 系统用户帐户,而且有人更改了 LDAP 管理员密码,EIM 将停止工作,没有任何用户能通过 Kerberos 进行身份验证。在准备工作中,最好为 EIM 设置额外的 LDAP 用户条目,并在 EIM 系统用户的 EIM 向导配置过程中指定这个帐户。通过这样的方法,您也可以通过访问控制列表 (ACL) 来控制对 LDAP 目录各个部分的访问权限(如果客户希望为其他用途的工具使用 LDAP 服务器)。

此外,从 IBM V6R1 开始,您可以配置 LDAP 服务器的多个实例。我们建议为 EIM 域控制器使用单独实例。LDAP 服务器是一个非常重要的组件。如果 EIM 域控制器无法使用,则任何用户都无法使用 SSO 进行身份验证。因此,建议将 EIM 部分分离到独立的 LDAP
服务器之中。

我们建议处理的另外一个可用性问题就是何时要求为多个 IBM i 分区实现 SSO。在此情况下,第一个 IBM i 分区将作为 EIM 域控制器,下一个 IBM i 分区将加入第一个 IBM i 分区中的现有 EIM 域。如果第一个分区出现故障,则没有任何用户能通过第二个分区或其他分区的身份验证。强烈建议首先以传统方式设置 EIM,随后配置 LDAP 副本,并在支持 SSO 的每一个 IBM i 分区上创建 EIM 数据的副本。只要副本处于活动状态,就应该将各系统上的本地 EIM 配置更改为指向其自己的(本地)系统,并将其作为 EIM 域控制器。通过这样的方法,每个分区都能彼此独立运行。

Network Authentication Service/Enterprise Identity Management

在上文中,我们讨论了 EIM 红皮书中的第 2 章规划工作表,以及附录 D 提供的一份空白规划工作表。如果您正确填写此工作表,那么完成 Enterprise Identity Management (EIM) 和 Network Authentication Services (NAS) 向导就会更加轻松,因为工作表中的某些值都需要填入到显示的各个屏幕中。可以在以下地址找到配置 EIM 和 NAS 的一份优秀知识库文档:

http://www-912.ibm.com/s_dir/slkbase.NSF/DocNumber/558590066。请注意,本文档中也包含一份规划工作表。看上去似乎有点多余,但无论怎样强调使用这种规划工作表的重要意义也不过分,这是多年以来决定许多配置成败的关键所在。如果您尚未填写这份工作表,则应该立即抽时间填写,之后再继续阅读知识库文档。红皮书的第 2.4 节说明了在何处能够获得该工作表的信息。此外,您还应阅读红皮书资料的第 2.2.2 节 “时间/SNTP”,确保您的 IBM i 能与 SNTP 服务器通信,并且通过 QTIMZON 系统值配置了正确的时区。(在 IBM i 最新版本中,QTIMZON 能够自动将 QUTCOFFSET 调整为正确的值。)

在上述 EIM/NAS 配置的第 J 步引用了知识库文档,您将使用向导来创建一个批处理文件 (.bat),必须将该文件复制到 Active Directory 机器并运行。创建该 .bat 文件的目的是为了在 Active Directory 机器上运行 ktpass 语句,设置您在 NAS 中配置的服务主体。与手动键入 ktpass 命令相比,该操作更加容易,且不易出错。如果 Windows 管理员已经设置了一种特定的目录结构,以及想要存放 Kerberos 服务帐户的位置,请在运行之前参阅文章末尾处有关自定义 AD 批处理文件的部分。

知识库文档中也有一节介绍如何使用 QSH 中的 keytab listkinit -k 命令验证 NAS 配置。为您配置的所有服务主体(krbsvr400、http 等)执行这样的验证,并纠正此时发现的所有错误都是非常重要的。纠正错误可能包括迭代式运行 NAS 配置、执行 DNS 更改、执行 Active Directory 更改,或者修正其他问题,例如 IBM i 与 Active Directory 机器之间的时间偏差。通过确保在此时正确配置 NAS,即可避免 NAS 在流程稍后的步骤中造成问题。如果您稍后遇到了问题,始终可以返回此处,并重新运行 NAS 验证来确保一切正确。KB 文档中的最后一项是设置 EIM 映射,即将您的 IBM i 用户 ID 映射到 Active Directory 中设置的用户 ID。最后,您应该检查 IBM i 中的系统值 QRMTSIGN,该值应设置为 *VERIFY。如果将其设置为 *FRCSIGNON,则会覆盖您配置单点登录的所有操作,并始终显示单点登录提示。

在 NAS 配置过程中,您将看到以下警告屏幕。也就是说,客户端与服务器对于主机名的解析各有不同。在本文展示的示例中,请注意共列出了两个不同的主机名。我们发现,尽管在遇到这个错误时,仍然可以继续 NAS 向导,但最好返回并解决 DNS 中的冲突源头,或者客户端或服务器中的主机表。我们在绕过主机名冲突屏幕时会遇到一个错误,且 krbsvr400 能正常工作,但 HTTP 主体无法连接。

图 2. NAS 向导主机名冲突
NAS 向导中显示客户端解析的主机名与 i5/OS 解析的主机名不同的警告屏幕。为获得最佳效果,请使用 Back 按钮返回并解决问题,而非单击 Next。
图 3. 使用 kinit -k 验证 NAS 配置时的常见错误:
错误解决方法
EUVF06014E 无法获得初始凭据。
状态 0x8.8x - s。
在 Network Authentication Services (NAS) 选项的 General 选项卡中,必须选中 Use TCP 选项。
EUVF06014E - 其他状态代码 红宝书附录 B 中列出了其他状态代码
EUVF06007E 无法获得默认凭据缓存的名称 导致这个问题的原因之一就是运行 kinit 的用户未配置主目录,例如 /HOME/userid。kinit 将在包含默认凭证缓存路径的目录中查找名为 krb5ccname 的文件。

错误 CWB0999 RC8999 表示以下问题之一:

1. DES 加密未启用。

2. Active Directory 中的 kbsvr400 帐户需要使用 Network Authentication Services (NAS) 配置中设置的密码重置。

3. 确认 AD 帐户已设置为 “Use DES Encryption”:http://support.microsoft.com/kb/977321

在默认情况下,Kerberos 身份验证的数据加密标准 (Data Encryption Standard, DES) 加密在 Windows 7 和 Windows Server 2008 R2 中是禁用的。这份 MS 技术文档描述了由于 DES 加密被禁用而导致应用程序、安全性和系统日志中可能收到以下事件的各种场景:

•KDCEVENT_UNSUPPORTED_ETYPE_REQUEST_TGS

•KDCEVENT_NO_KEY_INTERSECTION_TGS

此外,该文档还解释了如何在 Windows 7 和 Windows Server 2008 R2 中启用 Kerberos 身份验证的 DES 加密。如需获得具体信息,请参阅这份技术文档的 “症状”、“原因” 和 “解决方法” 部分。


启用 IBM i 应用程序

SSO 5250 会话

如果您正在使用 Windows Server 2003,在尝试配置 5250 Emulation 会话之前,建议您安装 kerbtrayKerbtray 是一种实用工具,能够显示 KDC 为您 PC 提供的票据。以下是获得该实用工具的链接。除了 kerbtray 之外,下载 (Windows Server 2003 Resource Kit Tools) 中还包含其他实用工具。
Windows Server 2003 Resource Kit Tools:

没有适用于 Windows Server 2008 的可下载资源包。Microsoft 声明 “不同于之前的操作系统,在 Windows Server 2008 和 Windows Server 2008 R2 中,资源包工具是作为服务器角色安装的一部分进行安装的。 在过去,您必须单独下载资源包工具。

诸如 kerbtray 等工具在 Windows Server 2008 和 Windows Server 2008 R2 版本中均有相应的替代品。Kerbtray 不再属于这个工具集的一部分,但可以使用 klist 来完成该工具之前执行的许多任务。”

http://social.technet.microsoft.com/wiki/contents/articles/windows-server-2008-and-windows-server-2008-r2-support-tools-dsforum2wiki.aspx
在加入启用 Kerberos 的域的 Windows PC 中安装和调用 kerbtray 之后,系统托盘中将出现一个绿色图标,如下所示:

图 4. Kerbtray 图标
系统托盘中显示一个长方形的绿色图标,表示 Kerbtray 已正确安装。

如果 kerbtray 无法从 KDC 获得票据,则此图标将显示如下:

图 5. 无法获取票据时的 Kerbtray 图标
在无法获取票据时,Kerbtray 图标将更改为两个黄色问号。

如果单击右键并选择列表票据,则显示效果如下:

图 6. Kerberos 票据列表
Kerberos Ticket 窗口的图表,顶端显示了客户主体及其票据。下半部分显示了服务主体及服务名称。

您应看到票据授予票据。本例中是 krbtgt/RCHPWDI.COM

如果您未从 KDC 获得 TGT,请勿继续尝试为任何应用程序配置 EIM,因为必须具备 TGT 才能继续。

如果您未收到 TGT,Wireshark(参阅参考资料)跟踪记录将是最有用的原因调查工具。


只要获得了 TGT,即可按照以下步骤为 Kerberos 身份验证配置 5250 Emulation 会话:

图 7. 配置 5250 仿真
5250 Emulation 会话视图,显示打开的 Communication 菜单和选中的 Configure 选项。
图 8. 配置 5250 仿真属性
配置屏幕的细节,显示了要选择的 Properties 按钮的位置。
图 9. 配置 5250 仿真登录
包含必要选项的连接屏幕,选择了使用 Kerberos 主体名称,不提示。

如果您遇到了更多的问题,使用 Wireshark 跟踪记录始终会是一种不错做法。此外,可以检查域控制器、AD 服务器和 PC 中的事件日志,以及 QZSOSIGN 作业日志中所有 Kerberos 错误消息。如果错误来自 IBM System I Access for Windows(通常具有 CWB 前缀),可以执行 Start > Programs > IBM System i Access for Windows > Service > Error and Trace Message Help,从中获得更多相关信息

SSO NetServer

为 Kerberos V5 身份验证启用 i5/OS NetServer 支持

SSO iNav

请按照以下步骤为 Kerberos 身份验证配置 System i Navigator (iNav):

图 10. 配置 System i Navigator
System i Navigator 显示了展开的 My Connections,以及用户右键单击系统名称时的上下文菜单。菜单中选中了 Properties 选项。
图 11. 配置 System i Navigator 登录
Properties 屏幕,显示选中的 Connection 选项卡,以及 Use Kerberos principal name, no prompting 单选按钮。

WebSphere V6R1

至此,EIM 已经完成了配置,可正常运行。下面我们将 SSO 纳入 WebSphere。我们使用 i5/OS V6R1 上的 WebSphere V6.1。

使用以下出版物作为指南:5761-XH2 V6R1 System i Access for Web

使用 WebSphere SPNEGO 支持的 System i Access for Web 单点登录

尽管我们并不关注启用 System i Access for Web 单点登录,但此文档描述了 Windows server 和 WebSphere 中需要完成的步骤。

从第 2.5 节 “创建 HTTP 服务主体” 开始,到第 3.4 节 “配置 SPNEGO TAI” 结束

值得注意的事项包括,第 19 页 “创建由 JGSS 使用的 Kerberos 配置文件:” 信息之后有一处拼写错误。这段内容提到了一个名为 “spnego.krb5.keytab” 的文件。该文件应该命名为 spnego.krb5.conf。随后,文档中为此文件提供值。请务必在填充 spnego.krb5.conf 时,使以下内容位于同一行中,而非像该文档所示的位于各自单独行中。

 default_keytab_name =
  FILE:/QIBM/UserData/OS400/NetworkAuthentication/keytab/HTTP_systemName.keytab

在此提供我们的 spnego.krb5.conf 文件,供您参考:

[libdefaults] 
default_realm = RCHPWDI.COM 
default_keytab_name =   
FILE:/QIBM/UserData/OS400/NetworkAuthentication/keytab/  
HTTP_rchassmb.keytab 
default_tkt_enctypes = des-cbc-md5 rc4-hmac 
default_tgs_enctypes = des-cbc-md5 rc4-hmac 
kdc_default_options = 0x54800000 
[realms] 
RCHPWDI.COM = { 
kdc = TOSHW2003.RCHPWDI.COM:88 
default_domain = rchland.ibm.com 
} 
[domain_realm] 
.rchland.ibm.com = RCHPWDI.COM

第 30 页中提供了使用安全性配置向导的说明。安全性向导的第 2 页演示了独立 LDAP 注册表的使用。无论您使用的是否是 i5/OS 中的目录服务器,您都应该做出这样的选择。在这一步中,您需要连接到 Microsoft Active Directory 中的 LDAP 服务器。

我们使用 Ldp.exe,这是一种 Windows Support Tool 实用工具,可用于对 Active Directory 执行轻量级目录访问协议 (LDAP) 搜索,根据给定搜索条件查找特定信息。

使用 Ldp.exe 查找 Active Directory 中的数据:

http://support.microsoft.com/kb/224543

在确定 Base 和 Bind 识别名语法时,这种工具非常有用。

接下来您需要查看第 4.6 节 “配置域帐户浏览器设置”。

配置 WebSphere 安全性之后,即可使用 snoop servlet 进行验证。如果要求您提供用户名和密码,则表示 SSO 未成功实现。

这就要求我们执行调试步骤。我们发现第 5 节非常有用,特别是第 5.3 节 “SPNEGO 组件的诊断跟踪记录设置”。我们发现,跟踪记录信息非常有用。

IBM Toolbox for Java

至此,EIM 已经完成了配置,可正常运行。下面,我们将使用 IBM Java Toolbox 来对 IBM i V6R1 上的 DB2 建立 SSO 连接。

我们提供了样例代码,演示将 Kerberos 票据与 IBM Toolbox for Java 一起使用,以便登录到 IBM i。下面是两个样例方法。第一个样例使用内置的 Toolbox 代码获取 Kerberos 票据。第二个样例使用 JGSS 手动获取 Kerberos 票据,并将其传递给 Toobox 代码。

您需要更改样例代码的 main() 部分,使之能在您的环境中正常工作。具体来说,以下三个系统属性的值需要更新。以与您的环境相匹配:

- java.security.krb5.realm(规划工作表 A 项)

- java.security.krb5.kdc(规划工作表 B 项)

- KRB5CCNAME(仅用于样例 2)

此外,两个样例方法中均需更新 AS400() 构造函数,以便使用您的 IBM i 系统的名称。

除了所需的编码更改之外,必须为 Kerberos 配置 IBM i。您还需要正确设置以下各项。

1. 在运行代码、正确添加到 Windows 域中的 PC 中,将一个 krb5.ini 文件添加到 C:\WINDOWS 目录中。

我们添加了一个 krb5.ini 示例文件,供您参考。

可下载的代码:krb5.ini

2. 我们遇到了一个情景,Microsoft 禁止使用一个接口从 Kerberos 安全包中检索票据授予票据/会话键对。这迫使我们更改 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters 中的注册表值 allowtgtsessionkey。下面的文档中记录了这一问题:

http://support.microsoft.com/kb/308339

3. 在 PC 上创建两个环境变量:USER.HOME 和 USER.NAME。

Java kinit 命令需要通过这两个环境变量将主体凭据存储在缓存之中。这是运行样例 2 的关键需求。

USER.HOME 是 kinit 存放凭据文件的目录,文件名以 krb5cc_ 开始,以 USER.NAME 环境变量值结束。USER.NAME 的值应该使用小写字母输入。在下面的示例中,凭据文件是 C:\Documents and Settings\jahrens\krb5cc_jahrens

图 12. 为 Toolbox 设置 PC 环境变量
环境变量屏幕的图像,显示将 USER.HOME 设置为用户的主目录,将 USER.NAME 设置为用于登录 PC 的用户 ID

4. 此时,我们建议在 PC 上运行 kinit 命令。kinit 命令是 JVM 的一部分。例如,我们使用 IBM JVM 1.6。在本例中,kinit 位于 C:\Program Files\IBM\Java60\jre\bin

下面是成功运行 kinit 命令的一个示例(您必须为用户输入密码)。

C:\Documents and Settings\jahrens>kinit 
Password for jahrens@RCHPWDI.COM:  
Done! 
New ticket is stored in cache file C:\Documents and Settings\jahrens\krb5cc_jahrens

如果 kinit 命令未成功执行,请纠正错误并再次运行命令。除非 kinit 成功完成,否则不应继续操作。为了协助调试,kinit 命令将使用 C:\Windows 目录下的 krb5.ini 文件中找到的值。

注意!样例 2 要求成功完成 kinit,之后才能成功调用和运行。

5. 我们仅在使用 IBM JDK/JRE 时取得了成功。使用 Sun JDK/JRE 时未能成功。

这些样例惟一的外部依赖项就是 Toolbox/JTOpen jar 文件 (jt400.jar) 和 JGSS(包含于 JRE 1.4 及更高版本中)。

可以通过 (JTOpen) 网站或者 /QIBM/ProdData/HTTP/Public/jt400/lib/ 中您 IBM i 上的 IFS 中获得 jt400.jar 文件。


其他样例代码

使用 EIM API 的样例代码

信息中心包含使用 C 语言编写的许多 EIM API 样例。然而,这些样例中通常仅仅包含一个函数。而在现实中,您通常必须在一个程序内组合多个函数,以便通过 API 实现一些有用的功能。

下面给出的源代码将几个 API 组合在一起,最终运行了 eimGetTargetFromSource API,可以用于将登录到客户端(源)所需的域配置文件映射到登录到另外一个平台或应用程序(目标)的配置文件。在示例中,您将看到,必须与其他 API 共同使用才能完成此操作。

访问 Windows 默认凭据缓存

如果您正在编写一个基于 Windows 的应用程序,需要从启用了 Kerberos 的服务器请求服务,那么可能就需要从默认 Windows 凭据缓存中获取票据授予票据。TGS_request 必须获得 TGT 才能获取服务票据。我们所遇到的问题在于,没有任何可用文档准确说明了如何获得 TGT,在 Windows 上,TGT 默认处于内存中的一个凭据缓存内,且从不会写入文件。我们知道,必然存在一组函数,但只能通过 Google 搜索来找到它们。最终得出了结论,即 Microsoft 提供的 klist 实用工具必然包含一些能够满足我们的需求(或接近于我们需要)的代码,因此我们集中精力查找 klist 的源代码。我们在 Microsoft Windows 7.0 SDK(可从 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=3138 下载)的样例源中找到了源代码。如果您安装了 Windows 7.0 SDK,则 klist.c 源代码会位于 C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\security\authorization\klist 中。

这里我们不会复制所有 klist 源代码,而是指出源代码中的一些关键元素。

我们特别关注的函数调用如下:

  • LsaConnectUntrusted - 返回登录句柄
  • LsaLookupAuthenticationPackage - 使用登录句柄和待缓冲区的名称,会返回一个包 ID
  • LsaCallAuthenticationPackage - 使用登录句柄和包 ID,返回信息缓冲区,包括所请求的票据在内

查看 klist 源代码即可了解这些函数调用是如何编写的。

我们在调用 klist 以获得 TGT 中使用的参数如下:

get krbtgt/RCHPWDI.COM,其中 RCHPWDI.COM 是默认领域的名称。

GetEncodedTicket 函数中包含大量 printf 语句,用于调用 LsaCallAuthenticationPackage。它们将解析票据结构,将其分段显示。下面给出了 RFC 1510 定义的票据结构:

typedef struct _KERB_EXTERNAL_TICKET { 
 PKERB_EXTERNAL_NAME ServiceName;  
 PKERB_EXTERNAL_NAME TargetName;  
 PKERB_EXTERNAL_NAME ClientName;  
 UNICODE_STRING      DomainName;  
 UNICODE_STRING      TargetDomainName;  
 UNICODE_STRING      AltTargetDomainName;  
 KERB_CRYPTO_KEY     SessionKey;  
 ULONG               TicketFlags;  
 ULONG               Flags;  
 LARGE_INTEGER       KeyExpirationTime;  
 LARGE_INTEGER       StartTime;  
 LARGE_INTEGER       EndTime;  
 LARGE_INTEGER       RenewUntil;  
 LARGE_INTEGER       TimeSkew;  
 ULONG               EncodedTicketSize;  
 PUCHAR              EncodedTicket; 
 } KERB_EXTERNAL_TICKET, *PKERB_EXTERNAL_TICKET

自定义 AD 批处理文件

对于必须复制到 Active Directory 机器中并运行的批处理文件 (.bat),在某些情况下,Windows 管理员已经设置了特定的目录结构以及要存放 Kerberos 服务帐户的位置。这通常与批处理文件不符。下面通过一个示例来明确展示这种情况。

例如,将以下条目纳入我们的批处理文件 (.bat):

DSADD user cn=rchassmb_1_krbsvr400,cn=users,dc=RCHPWDI,dc=COM -pwd PWD1SUP -display rchassmb_1_krbsvr400

KTPASS -MAPUSER rchassmb_1_krbsvr400 -PRINC krbsvr400/rchassmb.rchland.ibm.com@RCHPWDI.COM -PASS PASSWORD -mapop set +DesOnly -ptype KRB5_NT_PRINCIPAL

在这种情况下,创建新帐户 rchassmb_1_krbsvr400 的默认位置是:

root

!-> RCHPWDI.COM

!-> Users

!-> rchassmb_1_krbsvr400

通常情况下,Windows 管理员会设置一个结构,根据组织边界或者其他条件来组织 LDAP 条目。

例如:

root

!-> RCHPWDI.COM

!-> IT

!-> Operator

!-> System Administrators

!-> Technical Users

!-> Rochester

!-> Sales

!-> Marketing

!-> Support

etc.

随后,Windows 管理员将提供应用于存放 Kerberos 服务帐户的目录中的位置路径。

例如,Technical Users。在这种情况下,前例中的命令将如下所示:

DSADD user "cn=rchassmb_1_krbsvr400,ou=Technical Users,ou=IT,dc=RCHPWDI,dc=COM" -pwd PWD1SUP -display rchassmb_1_krbsvr400

KTPASS -MAPUSER rchassmb_1_krbsvr400 -PRINC krbsvr400/rchassmb.rchland.ibm.com@RCHPWDI.COM -PASS PASSWORD -mapop set +DesOnly -ptype KRB5_NT_PRINCIPAL

这就要求在 NAS 向导创建此文件之后手动编辑批处理文件。


参考资料

IBM Lab Services

特此感谢 Lab Services 为使用 IBM Java Toolbox 实现 EIM 提供了核心编码技术。Lab Services 可帮助您满足所有 IBM i 需求,包括 EIM 配置在内。

IBM Systems Lab Services and Training 能够帮助提供有关全球一流的信息技术工作方式的知识。他们注重于通过设计灵活的基础架构来降低成本,同时利用深厚的技术技能和培训经验来管理风险。

他们能够帮助优化数据中心和系统解决方案的利用率。他们主要关注于 IBM 产品开发实验室推出的新技术,并交付和培训重要的新细分市场、以及成熟和终结的市场技术。

他们与其他 IBM 服务机构(Global Technology Services、Global Business Services、Sales & Distribution、Software Group 和 IBM Business Partners)通力协作。如需了解更多信息,请访问其网站 www.ibm.com/systems/services/labservices,或者通过 stgls@us.ibm.com 取得联系。

Lab services 产品/工具:

  • EIM Populator Tool
  • EIM Management Tool
  • 自动化 EIM 标识符创建与删除的退出程序
  • SSO 实现咨询服务

Wireshark

查看网络中实际收发的数据允许您确认设置是否正确,并确认您获得的是票据,而非错误消息。Wireshark 为您提供了这方面的支持,我们对这种工具的应用十分广泛。它是一种开放源码的工具,可通过以下地址下载:

wireshark 下载

设置和操作说明:
wireshark CaptureSetup

查看 Wireshark 跟踪记录时,有必要理解以下流程。

图 13. Kerberos 数据流
图表显示 Kerberos Key Distribution Center 或 KDC 处理用户请求的票据授予票据。接下来,将票据授予票据发送至请求在服务器 1 上使用服务 A 的 Ticket Granting Server。TGS 将为服务 A 返回一个票据。最后,该票据将发送至服务器 1,允许用户访问其中的服务 A。服务 A 向用户发送一个票据,证明其已经连接到实际的服务 A

点击查看大图

图 13. Kerberos 数据流

图表显示 Kerberos Key Distribution Center 或 KDC 处理用户请求的票据授予票据。接下来,将票据授予票据发送至请求在服务器 1 上使用服务 A 的 Ticket Granting Server。TGS 将为服务 A 返回一个票据。最后,该票据将发送至服务器 1,允许用户访问其中的服务 A。服务 A 向用户发送一个票据,证明其已经连接到实际的服务 A

结束语

本文介绍了如何在 IBM i 平台上设置单点登录 (SSO),SSO 支持 5250 emulation、iSeries Navigator、WebSphere Application Server 和 Toolbox for Java 等常用应用程序。现在,用户可以登录到主工作站,随后不必再次登录即可访问其他系统和应用程序。尽管有一些组件必须协同工作,但您已经了解了如何验证每一个组件是否正常工作,之后再添加下一个组件。


下载

描述名字大小
使 Java Toolbox 处理 GSS 凭证KerberosSample1.java7.0KB
在 Java 中使用您自己的 GSS 凭证KerberosSample2.java5.0KB
使用 C 语言编写 eimGetTargetFromSource APIEIM_APIs.txt5.0KB

参考资料

学习

  • 访问 IBM i 信息中心,进一步了解 IBM i 6.1IBM i 7.1 的保存文件。
  • 初次接触 IBM i?请访问 New to IBM i 页面,了解有关的更多信息。
  • 技术书店:浏览技术书店,阅读有关这些主题和其他技术主题的图书。
  • IBM developerWorks 中国 IBM i 专区:为 IBM i 的开发人员准备的技术信息和资料。这里提供产品下载、how-to 信息、支持资源以及免费技术库,包含 2000 多份技术文章、教程、最佳实践、IBM Redbook 和在线产品手册。
  • developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
  • 加入 IBM i 中国开发团队 Blog,参与在线交流。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=IBM i
ArticleID=819804
ArticleTitle=测试驱动的单点登录
publish-date=07092012