以下部分描述如何通过基于简单和受保护协商(Simple and Protected Negotiate,简称 SPNEGO)机制和 Kerberos 协议的 Windows 身份验证以及 WebLogic 协商标识声明提供程序来使用 Microsoft 客户端设置单一登录(Single Sign-On,简称 SSO)。
Microsoft 客户端单一登录概述
通过使用 Microsoft 客户端进行单一登录 (SSO),可以在 WebLogic Server 域中运行的 Web 应用程序或 Web Service 与 Microsoft 域中的 .NET Web Service 客户端或浏览器客户端(例如,Internet Explorer)之间进行跨平台身份验证。Microsoft 客户端必须使用基于简单和受保护协商 (SPNEGO) 机制的Windows 身份验证。
跨平台身份验证通过仿真使用 Kerberos 协议的本地 Windows 到 Windows 身份验证服务的协商行为来实现。为使跨平台身份验证正常运行,非 Windows 服务器(本文中为 WebLogic Server)需要解析 SPNEGO 标记才能提取随后将用于身份验证的 Kerberos 标记。
使用 Microsoft 客户端实现 SSO 的系统要求
使用 Microsoft 客户端进行单一登录:主要步骤
使用 Microsoft 客户端配置 SSO 需要经过对 Microsoft Active Directory、客户端和 WebLogic Server 域的设置过程(有关这些过程的详细信息,请参阅以下部分)。
要使用 Microsoft 客户端配置 SSO,请执行下列操作:
将网络域配置为使用 Kerberos
通过使用 Active Directory 和 Kerberos 服务,Windows 域控制器可以充当 Kerberos 密钥分发中心(Key Distribution Center,简称 KDC)。在任何域控制器上,Active Directory 和 Kerberos 服务都自动运行。
要在网络域控制器中配置 Kerberos,需要将每台要访问 KDC 的计算机配置为查找 Kerberos 领域和可用的 KDC 服务器。在 Windows 计算机上,修改 C:/winnt
文件夹中的 krb5.ini
文件。在 UNIX 计算机上,修改 krb5.conf
文件,其默认位置为 /etc/krb5/
。例如:
[libdefaults]
default_realm = MYDOM.COM (Identifies the default realm.Set its value to your Kerberos realm)
default_tkt_enctypes = des-cbc-crc
default_tgs_enctypes = des-cbc-crc
ticket_lifetime = 600
[realms]
MYDOM.COM = {
kdc = (host running the KDC)
(For Unix systems, you need to specify port88, as in :88)
admin_server = MachineA
default_domain = MYDOM.COM
[domain_realm]
.mydom.com = MYDOM.COM
[appdefaults]
autologin = true
forward = true
forwardable = true
encrypt = true
创建 WebLogic Server 的 Kerberos 标识
Active Directory 提供对服务委托人名称 (SPN) 的支持,SPN 是 Kerberos 身份验证中的关键组件。它们是服务器上所运行的服务的唯一标识符。需要为使用 Kerberos 身份验证的每一项服务都设置 SPN,这样客户端才能识别网络上的服务。SPN 通常类似于 name@YOUR.REALM。需要定义 SPN 来表示 Kerberos 领域中的 WebLogic Server。如果某项服务未设置 SPN,客户端将无法找到该服务。如果未正确设置 SPN,Kerberos 身份验证将无法进行。Keytab 文件是用于存储 SPN 的机制。Keytab 文件将复制到 WebLogic Server 域并在登录过程中使用。此配置步骤描述如何创建 WebLogic Server 的 SPN、用户映射和 keytab 文件。
此配置步骤需要使用下列 Active Directory 实用工具:
注意:
setspn
和 ktpass
Active Directory 实用工具都是 Microsoft 的产品。因此,BEA Systems 不提供有关此类实用工具的完整文档。有关详细信息,请参阅适当的 Microsoft 文档。
要创建 WebLogic Server 的 Kerberos 标识,请执行下列步骤:
myhost.example.com
,则在 Active Directory 中创建一个名为myhost.
的用户。User must change password at next logon
”选项或任何其他密码选项。setspn
实用工具为步骤 1 中创建的用户帐户创建服务委托人名称 (SPN)。请输入下列命令:setspn -a host/
myhost.example.com myhost
setspn -a HTTP/
myhost.example.com myhost
setspn -L
account name
ktpass
实用工具创建用户映射:
ktpass -princ host/
myhost@Example.CORP
-pass
password
-mapuser myhost -out c:/temp/myhost.host.keytab
ktab
实用工具管理密钥表中的委托人名称和密钥对,并允许您列出、添加、更新或删除委托人名称和密钥对。在 UNIX 上,最好使用ktpass
实用工具。ktab
实用工具来创建 keytab 文件:ktab -k
keytab-filename
-amyhost@Example.CORP
ktpass
实用工具并通过类似以下形式的命令创建用户映射,其中password
是在步骤 1 中创建的用户帐户的密码:ktpass -princ HTTP/
myhost@Example.CORP
-pass
password
-mapuser myhost
-out c:/temp/myhost.HTTP.keytab
ktutil
实用工具将它们合并到一个 keytab 文件中,如下所示:ktutil: "rkt myhost.host.keytab"
ktutil: "rkt myhost.HTTP.keytab"
ktutil: "wkt mykeytab"
ktutil: "q"
kinit
实用工具验证 Kerberos 身份验证是否正常运行。kinit -k -t
keytab-file
account-name
New ticket is stored in cache file C:/Documents and
Settings/Username/krb5cc_MachineB
将 Microsoft 客户端配置为使用 Windows 集成身份验证
应确保将需要用于单一登录的 Microsoft 客户端配置为使用 Windows 集成身份验证。以下部分描述如何将 .NET Web 服务器和 Internet Explorer 浏览器客户端配置为使用 Windows 集成身份验证。
配置 .NET Web Service
要将 .NET Web Service 配置为使用 Windows 身份验证,请执行下列操作:
web.config
文件中,将 IIS 和 ASP.NET 的身份验证模式设置为 Windows,如下所示:conv
表示,则语法为:/*
* 明确将凭据传递到 Web Service
*/
conv.Credentials =
System.Net.CredentialCache.DefaultCredentials;
配置 Internet Explorer 浏览器
要将 Internet Explorer 浏览器配置为使用 Windows 身份验证,请在 Internet Explorer 中执行以下过程:
配置本地 Intranet 域
myhost.example.com
),然后单击“确定”。
配置 Intranet 身份验证
验证代理设置
为 Internet Explorer 6.0 设置集成身份验证
如果运行 Internet Explorer 6.0,则除了已描述的设置外,还需要进行另一项设置。
创建 JAAS 登录文件
如果在 Windows 或 UNIX 平台上运行 WebLogic Server,则需要 JAAS 登录文件。JAAS 登录文件指示要的 WebLogic 安全框架使用 Kerberos 身份验证并定义包含 WebLogic Server 的 Kerberos 标识信息的 keytab 文件的位置。该文件的位置在 WebLogic Server 的 java.security.auth.login.config 启动参数中指定,如通过启动参数在 WebLogic Server 中使用 Kerberos 身份验证 中所述。
清单 6-2 包含一个用于 Kerberos 身份验证的示例 JAAS 登录文件。
清单 6-2 用于 Kerberos 身份验证的示例 JAAS 登录文件
com.sun.security.jgss.initiate {
com.sun.security.auth.module.Krb5LoginModule required
principal="myhost@Example.CORP
" useKeyTab=true
keyTab=mykeytab
storeKey=true;
};
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required
principal="myhost@Example.CORP
" useKeyTab=true
keyTab=mykeytab
storeKey=true;
};
配置标识声明提供程序
WebLogic Server 包含一个安全提供程序 - 协商标识声明提供程序,它可支持使用 Microsoft 客户端的单一登录 (SSO)。此标识声明提供程序会解码简单和受保护协商 (SPNEGO) 标记来获取 Kerberos 标记,并在验证 Kerberos 标记后将 Kerberos 标记映射到 WebLogic 用户。需要在 WebLogic 安全领域中配置协商标识声明提供程序,以便启用 Microsoft 客户端的 SSO。请参阅“管理控制台联机帮助”中的配置协商标识声明提供程序 和配置身份验证和标识声明提供程序 。
通过启动参数在 WebLogic Server 中使用 Kerberos 身份验证
要在 WebLogic Server 中使用 Kerberos 身份验证,请在启动 WebLogic Server 时使用下列启动参数:
-Djava.security.krb5.realm=Example.COR
P
-Djava.security.krb5.kdc=ADhostname
-Djava.security.auth.login.config=krb5Login.conf
-Djavax.security.auth.useSubjectCredsOnly=false
-Dweblogic.security.enableNegotiate=true