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 域的设置过程(有关这些过程的详细信息,请参阅以下部分)。
在 Active Directory 中定义一个委托人来表示 WebLogic Server。Kerberos 协议使用 Microsoft 中的 Active Directory 服务器来存储所需的安全信息。需要在 Microsoft 域中访问的任何 Microsoft 客户端都必须设置为使用 Windows 集成身份验证,以便在可用时发送 Kerberos 票据。在 WebLogic Server 域的安全领域中,配置一个协商标识声明提供程序。SSO 中使用的 Web 应用程序或 Web Service 需要以特定的形式设置身份验证。此外,还必须创建定义 WebLogic Server 的 Kerberos 标识的位置的 JAAS 登录文件。
要使用 Microsoft 客户端配置 SSO,请执行下列操作:
将网络域配置为使用 Kerberos。请参阅将网络域配置为使用 Kerberos。创建 WebLogic Server 的 Kerberos 标识。选择一个 Microsoft 客户端(Web Service 或浏览器)并将其配置为使用 Windows 集成身份验证。请参阅将 Microsoft 客户端配置为使用 Windows 集成身份验证。将 WebLogic Server 域设置为使用 Kerberos 身份验证。创建一个 JAAS 登录文件,使其指向 Microsoft 域中的 Active Directory 服务器和步骤 1 中创建的 keytab 文件。请参阅创建 JAAS 登录文件.配置 WebLogic Server 安全领域中的协商标识声明提供程序。请参阅配置协商标识声明提供程序。
使用特定的启动参数启动 WebLogic Server。请参阅通过启动参数在 WebLogic Server 中使用 Kerberos 身份验证。
将网络域配置为使用 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 = <IP address for MachineA> (host running the KDC)
(For Unix systems, you need to specify port88, as in <IP-address>: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 来表示 Kerboros 领域中的 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 标识,请执行下列步骤:
在 Active Directory 服务器中,为运行 WebLogic Server 的主机创建一个用户帐户(选择“新建”>“用户”,而不是“新建”>“计算机”)。在创建该用户帐户时,应使用计算机的简单名称。例如,如果主机名为myhost.example.com
,则在 Active Directory 中创建一个名为myhost.
的用户。请记录下创建用户帐户时定义的密码。在步骤 3 中将需要使用此密码。请勿选择“用户必须在下次登录时更改密码”选项,或任何其他密码选项。
配置新用户帐户以使其符合 Kerberos 协议。此用户帐户的加密类型必须是 DES 并且必须要求进行 Kerberos 预身份验证。使用setspn
实用工具为步骤 1 中创建的用户帐户创建服务委托人名称 (SPN)。请输入下列命令:setspn -a host/
myhost.example.com myhost
setspn -a HTTP/
myhost.example.com myhost
使用以下命令检查与您的用户帐户关联的 SPN:setspn -L
account name
这是一个重要步骤。如果将同一服务链接到 Active Directory 服务器中的另一帐户,则客户端将不会向服务器发送 Kerberos 票据。使用ktpass
实用工具创建用户映射:Windowsktpass -princ host/
myhost@Example.CORP
-pass
password
-mapuser myhost -out c:/temp/myhost.host.keytab
创建 keytab 文件。在 Windows 上,ktab
实用工具管理密钥表中的委托人名称和密钥对,并允许您列出、添加、更新或删除委托人名称和密钥对。在 UNIX 上,最好使用ktpass
实用工具。在运行 WebLogic Server 的主机上运行ktab
实用工具来创建 keytab 文件:ktab -k
keytab-filename
-amyhost@Example.CORP
将 keytab 文件复制到 WebLogic Server 域的启动目录中。使用ktpass
实用工具并通过类似以下形式的命令创建用户映射,其中password
是在步骤 1 中创建的用户帐户的密码:ktpass -princ HTTP/
myhost@Example.CORP
-pass
password
-mapuser myhost -out c:/temp/myhost.HTTP.keytab
将步骤 a 中创建的 keytab 文件复制到 WebLogic Server 域的启动目录中。以根用户身份登录,然后使用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 Service 的web.config
文件中,将 IIS 和 ASP.NET 的身份验证模式设置为 Windows,如下所示:<authentication mode="Windows" />
添加 Web Service 客户端需要传递给代理 Web Service 对象的语句,以便通过 SOAP 发送凭据。例如,如果某项 Web Service 的 Web Service 客户端由代理对象conv
表示,则语法为:/* * 将凭据显式递到 Web Service */ conv.Credentials = System.Net.CredentialCache.DefaultCredentials;
配置 Internet Explorer 浏览器
要将 Internet Explorer 浏览器配置为使用 Windows 身份验证,请在 Internet Explorer 中执行以下过程:
配置本地 Intranet 域
配置 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 登录文件。
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
java.security.krb5.realm 定义运行 Active Directory 服务器的 Microsoft 域。java.security.krb5.kdc 定义运行 Active Directory 服务器的主机名。java.security.auth.login.config 定义 Kerberos 登录信息的位置。javax.security.auth.useSubjectCredsOnly 指定可以使用主题凭据之外的身份验证机制。weblogic.security.enableNegotiate 可使 WebLogic Server 中的 Servlet 容器支持 SPNEGO 使用的协商标记。
验证 Microsoft 客户端的 SSO 配置
要验证 Microsoft 客户端的 SSO 的配置是否正确,请将浏览器(已按配置 Internet Explorer 浏览器中的描述配置)指向要使用的 Microsoft Web 应用程序或 Web Service。如果登录到 Windows 域并从该域中的 Active Directory 服务器获取 Kerberos 凭据,则可以在不提供用户名或密码的情况下访问该 Web 应用程序或 Web Service。