使用 Microsoft 客户端配置单一登录


使用 Microsoft 客户端配置单一登录
2010年12月31日
  以下部分描述如何通过基于简单和受保护协商(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 身份验证服务。特定的 Active Directory 要求包括: 
  用于映射 Kerberos 服务的用户帐户 
  这些帐户的服务委托人名称(Service Principal Name,简称为 SPN) 
  创建 Keytab 文件并复制到 WebLogic Server 域的启动目录中 
  已正确安装 WebLogic Server 并将其配置为通过 Kerberos 进行身份验证(如本文所述) 
  在客户端系统上安装:   Windows 2000 Professional SP2 或更高版本 
  以下类型的客户端之一: 
  经过适当配置的 Internet Explorer 浏览器。支持 Internet Explorer 6.01 或更高版本。 
  .NET Framework 1.1 和经过适当配置的 Web Service 客户端。 
  客户端必须登录到 Windows 2000 域并且必须从该域中的 Active Directory 服务器获取 Kerberos 凭据。本地登录将不起作用。   使用 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 标识。 
  在运行 WebLogic Server 的主机的 Active Directory 中创建用户帐户。 
  创建该帐户的服务委托人名称。 
  创建该帐户的用户映射和 keytab 文件。 
  请参阅创建 WebLogic Server 的 Kerberos 标识 。   选择一个 Microsoft 客户端(Web Service 或浏览器)并将其配置为使用 Windows 集成身份验证。请参阅将 Microsoft 客户端配置为使用 Windows 集成身份验证 。 
  将 WebLogic Server 域设置为使用 Kerberos 身份验证。 
  创建一个 JAAS 登录文件并使其指向步骤 1 中创建的 Microsoft 域中的 Active Directory 服务器和 keytab 文件。请参阅创建 JAAS 登录文件 。 
  配置 WebLogic Server 安全领域中的协商标识声明提供程序。请参阅配置协商标识声明提供程序 。 
  使用特定的启动参数启动 WebLogic Server。请参阅通过启动参数在 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 文件   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 和 ktpass Active Directory 实用工具都是 Microsoft 的产品。因此,BEA Systems 不提供有关此类实用工具的完整文档。有关详细信息,请参阅适当的 Microsoft 文档。  要创建 WebLogic Server 的 Kerberos 标识,请执行下列步骤:   在 Active Directory 服务器中,为运行 WebLogic Server 的主机创建一个用户帐户(选择"新建">"用户",而不是"新建">"计算机")。 
  在创建该用户帐户时,应使用计算机的简单名称。例如,如果主机名为 myhost.example.com ,则在 Active Directory 中创建一个名为 myhost. 的用户。   请记录下创建用户帐户时定义的密码。在步骤 3 中将需要使用该密码。请勿选择"User must change password at next logon "选项或任何其他密码选项。   配置新用户帐户以使其符合 Kerberos 协议。此用户帐户的加密类型必须是 DES 并且必须要求进行 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 实用工具创建用户映射: 
  Windows 
  ktpass -princ host/[email protected] -pass password -mapuser myhost -out c:\temp\myhost.host.keytab  创建 keytab 文件。在 Windows 上,ktab 实用工具管理密钥表中的委托人名称和密钥对,并允许您列出、添加、更新或删除委托人名称和密钥对。在 UNIX 上,最好使用 ktpass 实用工具。 
  Windows   在运行 WebLogic Server 的主机上运行 ktab 实用工具来创建 keytab 文件: ktab -k keytab-filename -a [email protected]
  将 keytab 文件复制到 WebLogic Server 域的启动目录中。 
  UNIX   使用 ktpass 实用工具并通过类似以下形式的命令创建用户映射,其中 password 是在步骤 1 中创建的用户帐户的密码: ktpass -princ HTTP/[email protected] -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-fileaccount-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 Service 的 web.config 文件中,将 IIS 和 ASP.NET 的身份验证模式设置为 Windows,如下所示: 
  此设置通常是默认设置。   添加 Web Service 客户端需要传递给代理 Web Service 对象的语句,以便通过 SOAP 发送凭据。 
  例如,如果某项 Web Service 的 Web Service 客户端由代理对象 conv 表示,则语法为:  /*
  * 明确将凭据传递到 Web Service
  */
  conv.Credentials =
  System.Net.CredentialCache.DefaultCredentials;
  要将 Internet Explorer 浏览器配置为使用 Windows 身份验证,请在 Internet Explorer 中执行以下过程:   在 Internet Explorer 中,选择"工具">"Internet 选项"。 
  选择"安全"选项卡。 
  选择"本地 Intranet",然后单击"站点"。 
  在"本地 Intranet"弹出窗口中,确保选中"包括所有不使用代理服务器的站点"和"包括没有列在其他区域的所有本地 (Intranet) 站点"选项。 
  单击 "高级" 。 
  在"本地 Intranet"(高级)对话框中,添加所有要在参与 SSO 配置的 WebLogic Server 实例中使用的相对域名(例如,myhost.example.com ),然后单击"确定"。 
  选择"工具">"Internet 选项"。 
  选择"安全"选项卡。 
  选择"本地 Intranet",然后单击"自定义级别..."。 
  在"安全设置"对话框中,滚动到"用户验证"部分。 
  选择"只在 Intranet 区域自动登录"。使用此选项时,用户不必重新输入登录凭据,它是此解决方案的关键部分。 
  单击"确定"。 
  如果启用了代理服务器,则:   选择"工具">"Internet 选项"。 
  选择"连接"选项卡,然后单击"局域网设置"。 
  验证代理服务器地址和端口号是否正确。 
  单击"高级"。 
  在"代理服务器设置"对话框中,确保在"例外"字段中输入了所有需要的域名。 
  单击"确定"关闭"代理服务器设置"对话框。 
  如果运行 Internet Explorer 6.0,则除了已描述的设置外,还需要进行另一项设置。   在 Internet Explorer 中,选择"工具">"Internet 选项"。 
  选择"高级"选项卡。 
  滚动到"安全"部分。 
  确保选中"启用集成 Windows 身份验证(需要重启动)",然后单击"确定"。 
  如果未选中此选项,请重新启动计算机。 
  如果在 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 登录文件   WebLogic Server 包含一个安全提供程序 - 协商标识声明提供程序,它可支持使用 Microsoft 客户端的单一登录 (SSO)。此标识声明提供程序会解码简单和受保护协商 (SPNEGO) 标记来获取 Kerberos 标记,并在验证 Kerberos 标记后将 Kerberos 标记映射到 WebLogic 用户。需要在 WebLogic 安全领域中配置协商标识声明提供程序,以便启用 Microsoft 客户端的 SSO。请参阅"管理控制台联机帮助"中的配置协商标识声明提供程序 和配置身份验证和标识声明提供程序 。   要在 WebLogic Server 中使用 Kerberos 身份验证,请在启动 WebLogic Server 时使用下列启动参数:   其中   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 使用的协商标记。 
  发表于 @ 2010年12月31日 13:25:00 |

猜你喜欢

转载自gzg844cz.iteye.com/blog/1361828