如何在Notes中通过account使用SPNEGO单点登录

本文将介绍 Notes 8.5.3 中增加的新特性之一 --Notes 的 SPNEGO 认证。在 Notes 8.5.3 中新增加了几种 Account 类型,用来提供对 SPNEGO 认证的支持。本文将介绍 Notes 客户端为支持 SPNEGO 认证,在框架设计方面的改变以及如何通过配置操作系统加入域来实现单点登录,使 Notes 客户端可以通过相应的 Account 单点登录到相应的 Lotus Connections 或 Lotus Portal 等服务。

简介

在开始讨论如何在 Notes 中通过 account 使用 SPNEGO 单点登录之前,我们需要首先来了解一些概念:SPNEGO,Kerberos 和跨域认证。

SPNEGO(简 单和受保护的 GSSAPI 协商机制)是 一种 GSSAPI 伪机制,通常发音作“spen-go”,被用于协商合理的机制。它经常被用在客户端应用程序需要与远程服务器进行认证但二者均不清楚对方所支持的认证协议 的情况中。它最明显的用处在于 Microsoft 的 HTTP Negotiate 认证扩展。可协商的子机制包括 NTLM (NT LAN Manager) 和 Kerberos,它们均在 Microsoft Active Directory 中。在该活动目录中可找到更多的信息。

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络 上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

跨域认证是 Kerberos 协议中很有趣的一部分。它是用来建立跨越组织间边界的服务之间可持续的安全连接的。在这里我们只需要知道 Notes 可以通过 Account 使用 SPNEGO 进行跨域认证。也就是说 Notes 可以配置合适的 Account 来使用跨域的服务。

SPNEGO 在 Notes853 中的应用

集 成 Windows 认证(IWA:Integrated Windows Authentication)是在 Notes8.5.3 中被引入进来的(http://www-10.lotus.com/ldd/dominowiki.nsf/dx /Whats_New_in_Lotus_Notes_8.5.3_LN853),它是实现单点登录最理想的方式之一。无论是采用域工作模式还是采用工作 组模式,用户都可以凭借登录 Windows 系统后所获得的登录凭证自动登录到集成了 Windows 认证方式的所有应用上,无需再次输入用户名和密码。

而 SPNEGO 是一种能够让客户端和服务器通过协商的方式来决定究竟在认证的过程中采取哪种认证协议。在 Notes 8.5.3 中,SPNEGO 仅可以通过 NTLM 和 Kerberos 两种认证协议来获取 Windows 登录凭证。

通过下面的流程图我们可以进一步详细了解,Notes 客户端,受 SPNEGO 保护的服务器,动态目录服务器与 Kerberos 密钥分发中心之间是如何利用 SPNEGO 这种认证方式实现单点登录的:

图 1. Notes 使用 SPNEGO 认证流程

图 1. Notes 使用 SPNEGO 认证流程目 前,Notes 客户端是通过 IBM JVM 来实现对 SPNEGO 认证的支持。因此,支持 SPNEGO 的客户端目前也仅限于基于 IBM JVM 发布的 Lotus Notes 和 Lotus Expeditor。Notes 客户端并没有为支持 SPNEGO 认证设计新的用户界面,而是通过重用已有的 OS-CRED 登录组件来实现的。Notes 客户端可以通过两种方式来实现 SPNEGO 认证,一种是利用 Java URL 处理器,另外一种是利用账户框架中的 Account API 来完成认证。SPNEGO 认证是在客户端收到服务器端返回的 401 www-authentication Negotiate 之后被触发的,每当有客户端成功通过 SPNEGO 的认证都会在客户端存下相应的 HTTP Cookie,而这些 Cookie 可以被其后的 Java HTTP 连接所自动检索。因此,用户并不需要为每一个 SPNEGO 保护的资源设置一个账户,而仅需要在 Notes 账户中创建一个 OS-CRED 这种认证类型的账户即可。有一点需要大家注意的是,目前的 Notes 客户端(Notes 8.5.3)对 SPNEGO 认证的支持仅限于 Windows 平台。

如何在 Notes 客户端配置和使用 SPNEGO

对于 Notes 客户端,可以通过两种方式来开启 SPNEGO 认证(默认的情况下,SPNEGO 认证是关闭的),用户可以通过下面两种方式来开启 SPNEGO 认证:

  1. 通过创建 TAM-SPNEGO 或者是 OS-CRED 类型的账户
  2. 通过在 plugin_customization.ini 里,将 com.ibm.rcp.net.http/enable.spnego 设置为 true

在 SPNEGO 认证被激活之后,Notes 客户端会根据用户的输入信息为 IBM JVM 设置下面三个参数:

  • java.security.krb5.realm
  • java.security.krb5.kdc
  • java.security.krb5.conf

对于单域的 SPNEGO 认证,Notes 客户端只需要根据账户中用户设置的 URL 来解析出服务器所对应的 KDC 和 Real 信息后,赋给 JVM 的如下两个参数便可以完成 SPNEGO 认证。

  • java.security.krb5.realm
  • java.security.krb5.kdc

对于跨域的 SPNEGO 认证,需要有一个定义了不同域之间信任关系的 krb5.ini 文件。而在这个 krb5 文件存在时,上面两个系统属性的属性值将会被忽略,Notes 客户端会根据 krb5.ini 文件所在的位置(Notes 客户端要求将 krb5.ini 放置在如下目录下:<Notes_Install_Dir>\framework\rcp\deploy\extras)将其作为属性值设置 给下面的 JVM 属性。

  • java.security.krb5.conf

Notes 客户端并不提供 krb5.ini 文件,管理员用户需要根据动态目录服务器的配置情况参考( http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic= /com.ibm.websphere.express.doc/info/exp/ae/tsec_kerb_create_conf.html)来自 行创建 krb5 文件。在创建好 krb5 文件后,可以将此文件放在 Notes 安装包的 deploy\extras 目录下交给普通用户,这样在安装好 Notes 之后,krb5.ini 文件就会自动保存到 <Notes_Install_Dir>\framework\rcp\deploy\extras 下。下面清单 1 为 krb5.ini 的样例文件,仅供读者参考:

清单 1. krb5.ini 的样例文件
 [libdefaults] 
 default_realm =  CLIENT.IBM.COM 
 default_tkt_enctypes = des-cbc-md5 rc4-hmac 
 default_tgs_enctypes = des-cbc-md5 rc4-hmac 
 [realms] 
 SERVER.IBM.COM = { 
 kdc = serverkdc.ibm.com:88 
 default_domain = server.ibm.com 
 } 
 CLIENT.IBM.COM = { 
 kdc = clientkdc.ibm.com:88 
 default_domain = client.ibm.com 
 } 
 [domain_realm] 
 .server.ibm.com = SERVER.IBM.COM 
 .client.ibm.com = CLIENT.IBM.COM 
 [capaths] 
 SERVER.IBM.COM = { 
 CLIENT.IBM.COM = . 
 } 
 CLIENT.IBM.COM = { 
 SERVER.IBM.COM = . 
 }

在配置 SPNEGO 时需要注意的一些问题

  1. 对于 SPNEGO 被激活的 Notes 客户端,下面的注册表键值一定要被准确的创建和设置才能够保证 SPNEGO 认证的顺利完成 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos REG_DWORD name:allowtgtsessionkey Value: 1
  2. 对于使用 Windows Vista 和 Windows 7 的用户,在安装 Notes 客户端的时候一定要注意使用管理员权限来完成安装,这样才能够确保上面的注册表键值被准确设置。此外,对于 Win Vista 和 Win 7 用户还应注意,有时候在 Notes 已经激活 SPNEGO 认证的时候,仍然可能遇到如清单 2 所示的异常。
    清单 2. 可能遇到的异常
     com.ibm.security.krb5.KrbException, status code: 31 
       message: Integrity check on decrypted field failed 
       at com.ibm.security.krb5.KrbTgsRep.<init>(Unknown Source) 
       … …

为避免上述异常出现,Notes 用户可以通过下面三种方式避免:

  • 用管理员权限启动 Notes 客户端(推荐)
  • 将当前启动 Notes 客户端的操作系统用户从系统管理员组里面删除
  • 取消系统 UAC

SPNEGO 在 Notes 中的引用举例

通过前面对于 SPNEGO 概念介绍和 Notes 当中的 SPNEGO 的框架介绍,相信大家对 SPNEGO 已经有了初步的了解,接下来将具体通过举例介绍 Notes 中使用 SPNEGO 的应用。

使用域用户(domain user)将操作系统加入一个域(domain)并检验 OS 的 SPNEGO 设置成功。

  1. 点击“开始”,找到“控制面板”,然后打开其中的“网络连接”,双击“本地连接”,在本地连接状态中的“常规”页面上单击“属性”,打开本地连接属性,下 拉“此连接使用下列项目”中的条目,找到并打开“Internet 协议(TCP/IP)”, 在弹出的 Internet 协议(TCP/IP)属性页面中选择使用下面的 DNS 服务器地址,将 DNS 配置为你所使用的 AD Server 的 IP 地址。如下图所示的“255.255.255.255”。
    图 2. Internet 协议属性页面

    图 2. Internet 协议属性页面

  2. 右键点击“我的电脑”,选择“属性”,打开“计算机名”页面。选择“更改”以加入域。
  3. 填写“计算机名”例如 mycomputer,选择隶属于域单选按钮并填写你所需要加入的域名称,如下图中的“domainname”, 点击“OK”按钮。
    图 3. 计算机名称更改页面

    图 3. 计算机名称更改页面

  4. 在弹出对话框中填写域用户的信息,填写域用户名及密码,点击“OK”按钮,将出现以下欢迎加入域的信息,证明此时已成功加入域。
    图 4. 计算机成功加入域提示页面

    图 4. 计算机成功加入域提示页面

  5. 按照提示说明重启操作系统,再次登录操作系统时以域用户信息 ( 域用户名及密码 ) 登录。
  6. 接下来还要验证 OS 的 SPNEGO 是否成功,以 IE 为例,首先需要在浏览器中添加站点。方法如下:打开“控制面板”中的“Internet Options”,在“Security”页面中点选“Local intranet”,单击“Sites”,在弹出页面中单击“Advanced”, 填写将要创建的 Account 中的 Service 的 URL,并单击“Add”按钮。
    图 5. 浏览器选项页面

    图 5. 浏览器选项页面

  7. 然后在浏览器中打开 Service URL,浏览器将直接显示 Service 登录后的页面,SPNEGO 设定成功。
    图 6. 浏览器直接登录 Activities 页面

    图 6. 浏览器直接登录 Activities 页面

在 Notes 中创建 Account

SPNEGO 支持的服务类型有多种,因此 Notes 也为其提供了多种对应的账户类型,下面介绍如何创建几种常用的账户,Home Portal Account, Connection Account 和 Embedded Browser 使用的 Account。

  1. 运行 Notes,打开“File” -> “Preferences”。
  2. Home Portal 账户创建如下图所示。填写 server 名称,在验证类型栏选取“OS-CRED”。这时,Log in infromation 中“Name”和“Password”的输入框变成灰色被禁用,用户不需要再输入任何用户名和密码的 credential。而是直接使用 OS 的 credential。
    图 7. Notes 首选项中设置 home portal account

    图 7. Notes 首选项中设置 home portal account

  3. Connection 账户创建如下图所示。在 Server URL 输入框中填入 Service 的 URL。打开“高级”选项,在“验证协议”下选择“OS Credential”
    图 8. Notes 首选项中设置 Connection account 的 Setting

    图 8. Notes 首选项中设置 Connection account 的 Setting

  4. 点击“OK”,此时用的是用户登录 OS 的 Credential,不需要再输入,所以“User name”及“User password”输入框变成灰色,不能进行输入。
    图 9. Notes 首选项中设置 Connection account 成功

    图 9. Notes 首选项中设置 Connection account 成功

  5. Embedded Browser 使用的 Account 的创建。打开“File” ->“Preference”, 单击“Account”,在出现的 Account 页面中点击“New Account”按钮。像下图所示填写“Account Name”,“Description”。选择“Other”类型并填写 Server 的 URL。在“Log in information”中填写登录 Connection 的“Name”和“Password”。点击“OK”以保存 Account。
    图 10. Notes 首选项中建立 Account 页面

    图 10. Notes 首选项中建立 Account 页面

通过已经创建的 SPNEGO Accont 使用 Service

  1. 打开“Open” ->“Portal Applications”。Notes 直接打开刚刚设置的 Home Portal 中的应用,不需要输入用户名密码。
    图 11. 直接登录 Portal 应用

    图 11. 直接登录 Portal 应用

  2. 对于 Connection 中的 Activities 也是一样,打开 Notes 右边的“Activites”,Activities 将直接登录并不需要输入用户名和密码。
    图 12. 直接登录侧边栏的 Connection Activities

    图 12. 直接登录侧边栏的 Connection Activities

  3. 用户也可以通过 Embedded Browser 直接登录 Connection 而不需要输入用户名和密码。打开“Open” ->“Embedded Browser”, 在地址栏中输入 Connection 的 Activities 的 URL. 单击回车键 , 可以看到 Connection 自动登录而不需要输入用户名和密码。如下图所示。
    图 13. 直接登录 browser 中的 Connection Activities

    图 13. 直接登录 browser 中的 Connection Activities

来源:http://www.ibm.com/developerworks/cn/lotus/ls-cn-notes-spnego/index.html

发表评论