以下部分描述如何通过基于简单和受保护协商(Simple and Protected Negotiate,简称 SPNEGO)机制和 Kerberos 协议的 Windows 身份验证以及 WebLogic 协商标识声明提供程序来使用 Microsoft 客户端设置单一登录(Single Sign-On,简称 SSO)。
通过使用 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,需要:
在主机上安装:
在客户端系统上安装:
客户端必须登录到 Windows 2000 域并且必须从该域中的 Active Directory 服务器获取 Kerberos 凭据。本地登录将不起作用。
使用 Microsoft 客户端配置 SSO 需要经过对 Microsoft Active Directory、客户端和 WebLogic Server 域的设置过程(有关这些过程的详细信息,请参阅以下部分)。
要使用 Microsoft 客户端配置 SSO,请执行下列操作:
请参阅创建 WebLogic Server 的 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/
。例如:
清单 6-1 示例 krb5.ini 文件
[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
Active Directory 提供对服务委托人名称 (SPN) 的支持,SPN 是 Kerberos 身份验证中的关键组件。它们是服务器上所运行的服务的唯一标识符。需要为使用 Kerberos 身份验证的每一项服务都设置 SPN,这样客户端才能识别网络上的服务。SPN 通常类似于 [email protected]。需要定义 SPN 来表示 Kerberos 领域中的 WebLogic Server。如果某项服务未设置 SPN,客户端将无法找到该服务。如果未正确设置 SPN,Kerberos 身份验证将无法进行。Keytab 文件是用于存储 SPN 的机制。Keytab 文件将复制到 WebLogic Server 域并在登录过程中使用。此配置步骤描述如何创建 WebLogic Server 的 SPN、用户映射和 keytab 文件。
此配置步骤需要使用下列 Active Directory 实用工具:
setspn—
Windows 2000 资源工具包 ktpass—
Windows 2000 分发 CD 中的 Program Files/Support Tools
注意:
setspn
和 ktpass
Active Directory 实用工具都是 Microsoft 的产品。因此,BEA Systems 不提供有关此类实用工具的完整文档。有关详细信息,请参阅适当的 Microsoft 文档。
要创建 WebLogic Server 的 Kerberos 标识,请执行下列步骤:
在创建该用户帐户时,应使用计算机的简单名称。例如,如果主机名为 myhost.example.com
,则在 Active Directory 中创建一个名为 myhost.
的用户。
请记录下创建用户帐户时定义的密码。在步骤 3 中将需要使用该密码。请勿选择“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
这是一个重要步骤。如果将同一服务链接到 Active Directory 服务器中的另一帐户,则客户端将不会向服务器发送 Kerberos 票据。
ktpass
实用工具创建用户映射: Windows
ktpass -princ host/
[email protected]
-pass
password
-mapuser myhost -out c:/temp/myhost.host.keytab
ktab
实用工具管理密钥表中的委托人名称和密钥对,并允许您列出、添加、更新或删除委托人名称和密钥对。在 UNIX 上,最好使用 ktpass
实用工具。 Windows
ktab
实用工具来创建 keytab 文件: ktab -kkeytab-filename
-a[email protected]
UNIX
ktpass
实用工具并通过类似以下形式的命令创建用户映射,其中 password
是在步骤 1 中创建的用户帐户的密码: ktpass -princ HTTP/
[email protected]
-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 集成身份验证。以下部分描述如何将 .NET Web 服务器和 Internet Explorer 浏览器客户端配置为使用 Windows 集成身份验证。
要将 .NET Web Service 配置为使用 Windows 身份验证,请执行下列操作:
web.config
文件中,将 IIS 和 ASP.NET 的身份验证模式设置为 Windows,如下所示: 此设置通常是默认设置。
例如,如果某项 Web Service 的 Web Service 客户端由代理对象 conv
表示,则语法为:
/*
* 明确将凭据传递到 Web Service
*/
conv.Credentials =
System.Net.CredentialCache.DefaultCredentials;
要将 Internet Explorer 浏览器配置为使用 Windows 身份验证,请在 Internet Explorer 中执行以下过程:
myhost.example.com
),然后单击“确定”。 如果启用了代理服务器,则:
如果运行 Internet Explorer 6.0,则除了已描述的设置外,还需要进行另一项设置。
如果在 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="[email protected]
" useKeyTab=true
keyTab=mykeytab
storeKey=true;
};
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule required
principal="[email protected]
" useKeyTab=true
keyTab=mykeytab
storeKey=true;
};
WebLogic Server 包含一个安全提供程序 - 协商标识声明提供程序,它可支持使用 Microsoft 客户端的单一登录 (SSO)。此标识声明提供程序会解码简单和受保护协商 (SPNEGO) 标记来获取 Kerberos 标记,并在验证 Kerberos 标记后将 Kerberos 标记映射到 WebLogic 用户。需要在 WebLogic 安全领域中配置协商标识声明提供程序,以便启用 Microsoft 客户端的 SSO。请参阅“管理控制台联机帮助”中的配置协商标识声明提供程序 和配置身份验证和标识声明提供程序 。
要在 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
其中
原文出处(点击此处)