WebSphere Application Server Community Edition 目前不支持 Kerberos 验证。本文介绍如何利用 IBM Java Platform 提供的 Kerberos,实现在 WebSphere Application Server Community Edition 中执行 Kerberos 验证。
简介
IBM WebSphere Application Server Community Edition V2.1.1.2 (以下简称为 Community Edition)是一个基于 Apache Geronimo 2.1.4 的免费 Java Platform, Enterprise Edition 5.0 (Java EE 5) 认证应用服务器。Community Edition 使用 Java Authentication and Authorization Service (JAAS) 登录模块在 Web 应用程序中进行用户验证,使用 Java Authorization Contract for Containers (JACC) 进 行授权。
Kerberos 是由麻省理工学院开发的验证协议。Kerberos 协议允许在不安全的计算机网络上通信的计算机节点以一种安全的方式互相验证。 Kerberos 协议的最新版本为 Version 5。
Community Edition 并不提供 Kerberos 协议实现。在本文中,您将利用 IBM Java Platform 提供的 Kerberos 协议实现在 Community Edition 中验证用户并对用户授权。为实现本文的目的,我们使用一个 Microsoft Active Directory 服务器(以下简称为 Active Directory)作为一个用户资源库。本文需要 WebSphere Application Server Community Edition V2.1.1.2 或更高版本。
Kerberos: 它是如何工作的?
Kerberos 使用对称密匙密码系统,需要一个称为 Key Distribution Center (KDC) 的可信第三方,KDC 包含一个 Authentication Server (AS) 和一个 Ticket Granting Server (TGS)。KDC 维护一个秘密密匙数据库。网络上的每个实体(用户或服务)都 与 KDC 共享一个秘密密匙,这个秘密密匙只有 KDC 和实体自身知晓。这样,通过这个秘密密匙就可以对实体进行身份验证。Kerberos 使用票 据(ticket),称为 “Kerberos 票据”,该票据拥有时间戳且存在时间很短。因此,实体必须保持时间同步。
实体使用一个共享秘密(通常是密码)对 Authentication Server 进行验证,并接收一个 Ticket Granting Ticket (TGT)。然后它联系 Ticket Granting Server,使用 TGT 验证其身份并请求一个服务。TGS 验证该实体是否有权使用服务并发送一个 Service Ticket (ST)。该实 体然后联系 Service Server (SS),使用 ST 证明自己有权利用服务,然后实际使用服务。实体能够重复使用 TGT 获取额外的 ST 以使用 SS ,无需再次使用 AS 验证自己。Kerberos 协议经过特殊设计,无需在网络上传播共享秘密(如密码)就可以进行验证。使用 Kerberos 验证时 ,用户通常使用一个输入设备(如键盘)输入他们的凭证,而服务使用一个 Keytab 文件存储用户凭证,并使用它们对 KDC 进行验证。
Kerberos 和 Community Edition
Community Edition 不 提供 Kerberos 协议的实现。IBM Java Platform 通过 com.ibm.security.auth.module.Krb5LoginModule 类提供 Kerberos 协议的一个实现。为了利用 Java Platform 提供的 Kerberos 实现,我们创建一个包装 Krb5LoginModule 的 LoginModule 实现, 并将所有 LoginModule API 调用委托给 Krb5LoginModule。KerberosLoginModule 的代码如清单 1 所示。