在 Lotus Domino 8.5 ID Vaullt 中编写密码重置程序

Lotus Notes 用户忘记用户 ID 的密码是时有发生的事情,IDRecovery 机制提供了密码重置的功能,但需要由管理员手动完成,这既浪费人力与时间也增加了重置密码被外泄的可能性。Lotus Domino 8.5 中引入了 IDVault,它的一个优势是能够用程序自动进行密码重置。本文首先介绍了在 IDVault 中密码重置的基本流程,然后详述了密码重置的安全性及密码重置程序的编写,最后给出了一个实例作为参考。

密码重置概述

Lotus 软件试用下载

立即下载最新版本的 IBM Lotus 试用软件,轻松体验产品的最新特性!

针对 Notes 用户忘记用户 ID 密码的问题,Lotus Domino 在 8.5 以前在 ID Recovery 机制中包括了密码重置的功能,管理员可以手动重置用户 ID 的密码,之后用户可以使用新密码登录 Notes。Domino 8.5 引入了 ID Vault 帮助管理员更有效地管理 ID 文件。ID Vault 是服务器上的可选数据库,用于保存用户 ID 的拷贝,读者可以参考 Lotus Domino Administrator 8.5 Help。ID Vault 也提供了密码重置的功能,即对 ID Vault 中的用户 ID 进行密码重置,之后用户可以使用新密码登录 Notes。ID Vault 提供的密码重置有两种方式:一种是管理员通过 Domino Administrator 为用户重置密码,这与 ID Recovery 的密码重置方法类似;另外一种是开发人员调用 ResetUserPassword 方法定制重置密码程序。使用这种方式,每个用户可以自助式地重置自己的密码,而不需要管理员的帮助,从而节约了管理员的时间,另外也降低了密码外泄的可能性。

开发者可以使用 C、Java、JavaScript. 或 LotusScript. API 中相应的 ResetUserPassword 方法定制重置密码的应用程序。这可以是允许用户重置自己密码的自助密码重置程序(Self-Service Password Reset Application),也可以是技术支持人员用于重置用户密码的应用程序。其中,LotusScript. 和 Java API 可以编写 agent 密码重置程序,而 Lotus Notes C API 可以编写非 agent 密码重置程序。


密码重置的基本流程

针对上述 ID Vault 中两种不同的密码重置方式,图 1 左展示了管理员使用 Domino Administrator 手动给用户重置密码的流程,简称为流程 1,图 1 右展示了用户 / 管理员使用密码重置程序重置密码的流程,简称为流程 2。


图 1. 密码重置流程图
图 1. 密码重置流程图

图中标为黄色的活动(活动 D)是由程序自动完成的 , 下边的章节“密码重置程序的编写”对该活动作出了详细介绍;蓝色的活动(活动 A,C)则是手动完成的;绿色的活动(活动 B)可以自动完成也可以手动完成,如果是系统对用户身份进行验证活动 B 则是自动完成,如果是管理员对用户身份进行验证活动 B 则是手动完成。红色框的活动(活动 A,B,E,F)是身份 / 权限验证活动。其中,活动 A,B 是对要重置其密码的用户的身份的验证,活动 E,F 则是对重置密码的人员或应用程序的权限的验证,下边的章节“密码重置的安全性”对这四个活动作出了详细介绍。

  • 管理员给用户重置密码的流程

在流程 1 中,对重置密码用户的身份验证以及密码重置都是由管理员手动完成,且在有很多密码需要重置的情况下,不能批处理操作。重置后的新密码可以通过口头的方式告知用户,或者通过向用户经理发邮件的方式告知。从整个流程来看,不难看出,密码重置需要多方介入,耗时耗力,且容易造成重置密码外泄。

  • 用户使用密码重置程序重置密码的流程

在流程 2 中,用户的身份由系统验证,密码重置由程序完成。整个流程只有用户一人参与,减少了人力与时间,另外,重置密码是由用户提供的,这也降低了密码外泄的可能性。

  • 管理员使用密码重置程序重置密码的流程

在流程 2 中,管理员对用户进行身份验证后,使用密码重置程序进行密码重置。由程序的方式进行密码重置可以实现密码重置的批处理,且其操作比直接使用 Domino Administrator 要简化许多。

密码重置的安全性

由上节可知,ID Vault 中的重置密码可以使用两种方法:

  1. 获得授权的人员可以使用 Domino Administrator 为用户重置密码。
  2. 用户或获得授权的人员可以使用定制应用程序重置密码。

每种模型都有两个安全性注意事项:

  1. 对要重置其密码的用户的身份验证 。重置密码前首先要验证要重置其密码的用户的身份,只有在确保该用户的身份是值得信任的情况下才能重置其密码,否则有可能出现重置他人密码的情况。在上一节的流程中,对要重置其密码的用户的身份验证体现为活动 A,B。 要重置密码的用户的身份的 验证必须由重置密码的人员或应用程序完成。
  2. 对重置密码的人员或应用程序的权限验证。 重置密码时 Domino 会验证重置密码的人员或应用程序的权限,只有在确保重置密码的人员或应用程序是值得信任的情况下 Domino 才会重置密码,否则有可能出现任何用户或任何程序都可以重置用户密码的情况。在上一节的流程中,对重置密码的人员的权限验证体现为活动 E,对应用程序的权限验证则体现为活动 F。对重置密码的人员或应用程序的权限的信任是通过特殊用途的交叉证书(称为密码重置证书)建立的。可以使用“ID Vaults”-“Create”或“ID Vaults”-“Manage”工具来从 ID Vault 中存储的用户 ID 的父验证者发布密码重置证书。这些证书创建在 Domino 目录的“Configuration”-“Security”-“Certificates”视图中的“Password Reset Certificates”,如图 2。


图 2. 密码重置证书
图 2. 密码重置证书

对要重置其密码的用户的身份的验证

密码重置管理员可以对要重置密码的用户的身份进行验证,如流程 1 中的活动 A。比如由用户的经理向管理员发邮件来确定用户身份的可靠性,又或者用户向管理员出示证件证明身份。

如果对要重置密码的用户的身份的验证不是由密码重置管理员完成的,那么应用程序应该负责验证使用该程序的用户的身份,如流程 2 中的活动 B。一种方法是由 Domino Web 服务器通过对用户名和 Internet 密码的验证来确认用户身份。Notes 用户除了拥有 Notes 密码,还可以拥有一个 Internet 密码,如果用户忘记了 Notes 密码还记得 Internet 密码,那么用户的身份依然可以确定,这种方法就是使用用户名和 Internet 密码来实现用户身份验证的方法,后文的应用实例就使用的这种验证方法。或者,应用程序本身可以处理认证,例如通过使用 LDAP 目录服务器认证或通过向用户提出个人问题。

对重置密码的人员和应用程序的权限的验证

  1. 使用 Domino Administrator 重置密码的人员的密码重置权限

    以具有密码重置权限的身份登录 Domino Administrator 的人员可以使用“重置密码”工具重置用户密码。要向这些人员授予密码重置权限,Domino 管理员可为个人或组织单元创建密码重置证书。不能为组创建密码重置证书,但可以选择组作为为每个当前成员创建个人密码重置证书的方式。

    通过 Domino Administrator 重置密码的人员对于将新密码传达给用户有两种选择。他们可以选择新密码或生成随机密码,然后自行向用户通知密码。他们应该能够确认用户的身份,这一点非常重要。或者,他们可以生成随机新密码,并通过加密电子邮件将密码发送给相关人员,例如用户的经理。

    最好向特别为重置密码而注册并使用的 ID 授予密码重置权限。

  2. agent 程序的密码重置权限

    如果密码重置程序为 LotusScript. agent 或 Java agent,那么必须将具有“Self-service password reset authority”(自助密码重置权限)标志的密码重置权限授予已签署 agent 的用户,如图 3 中的 admin/85gold,最好是特别为此目的而注册的用户。在其上部署 agent 的服务器也必须具有此权限,如图 3 中的 85gold/85gold,并且必须授予 agent 签署者“run restricted LotusScript/Java agents”访问权。另外,如果选择服务器组名,Domino 将为当前作为组成员的每台服务器发布一份密码重置证书。将来对组成员身份进行的更改不会使密码重置证书发生相应更改。再有,即使应用程序的用户是将为用户重置密码的技术支持人员,也要为 agent 签署者选择“Self-service password reset authority”。



    图 3 . 密码重置权限设置
    图 3 . 密码重置权限设置

  3. 非 agent 程序的密码重置权限

    如果密码重置程序为非 agent 程序,那么应将具有“Self-service password reset authority”标志的密码重置权限授予已授权运行应用程序的用户或服务器。同 agent 密码重置程序,即使应用程序的用户是将为用户重置密码的技术支持人员,也要为用户名选择“Self-service password reset authority”。

    Notes C API 应用程序的运行与 Notes 一样,都需要以一个用户的身份登录,用户的权限决定了 C API 程序所能处理数据的能力,因此,若要运行由 Notes C API 所编写的非 agent 密码重置程序,那么其必须由上述已授权的用户登录后运行,这就是对非 agent 程序的密码重置权限的验证。

    密码重置程序的编写

    使用 Notes C API 编写非 agent 密码重置程序

    Notes C API 8.5 提供了一个新的方法 SECidvResetUserPassword,用于重置 ID Vault 中用户 ID 的密码。下面是该方法的原型和参数介绍,读者可以参考 Lotus C API Notes/Domino 8.5 Reference。

    STATUS LNPUBLICFUNC SECidvResetUserPassword( 
        char *pServer, 
        char *pUserName, 
        char *pPassword, 
        WORD wDownloadCount, 
        DWORD ReservedFlags, 
        void *pReserved); 
    

    其中,pServer 是密码重置程序所运行的服务器名称,如果程序直接在本地服务器上运行则可以为空。该服务器可以不是 Vault 服务器,但必须和 Vault 服务器在同一个域中,且版本必须是 Domino 8.5 或以上。

    pUserName 是需要重置密码的用户名称,应使用规范写法,如"CN=John Smith/O=IBM"。

    pPassword 是被重置后的密码。

    wDownloadCount 指如果用户可以自动下载 ID 文件,那么该参数则指明用户可以下载 ID 文件的次数,否则该参数应该为 0。

    ReservedFlags 是保留参数,设置为 0。

    pReserved 也是保留参数,设置为 NULL。

    那么,下面的函数调用:

     SECIdvResetUserPassword ("ella.notesdev.ibm.com", "CN=John Smith/O=IBM", 
    "23king5ZXw",0,NULL); 
    

    就是将 ID Vault 中的 CN=John Smith/O=IBM 的 ID 文件的密码重置为 23king5ZXw,程序运行在 ella.notesdev.ibm.com 服务器上,ella.notesdev.ibm.com 与 Vault 服务器在同一个域内。

    使用 LotusScript. 编写 agent 密码重置程序

    在 Domino 8.5 中 LotusScript. 的 NotesSession 类增加了 ResetUserPassword 方法,下面是该方法的原型。该方法只支持在 agent 中使用。

     ResetUserPassword( servername, username, password[, downloadcount ] ) 
    

    参数说明基本类似于上述 Notes C API 中的 SECidvResetUserPassword,这里不再赘述,读者可以参考 Lotus Domino Designer 8.5 Help。下边描述其两种使用方法。

    1. 将 NotesSession 所对应的用户的密码重置,agent 运行在本地服务器上。
       Dim s As New NotesSession 
       Call s.ResetUserPassword("","","test") 
      

    2. 将 ID Vault 中的 hedy rosen/green/apple 的 ID 文件的密码重置为 test,程序运行在 redeye/apple 服务器上,redeye/apple 与 Vault 服务器在同一个域内 。
       Call s.ResetUserPassword("redeye/apple","hedy rosen/green/apple","test") 
      

      使用 Java 和 JavaScript. 编写密码重置程序的方法类似于 LotusScript,这里不再描述,读者可以参考 Lotus Domino Designer 8.5 Help。


    密码重置程序的应用举例

    Domino 8.5 随附了一个应用程序 (PwdResetSample.nsf)。该应用程序包含名为 UserPasswordReset 的 web agent。通过 UserPasswordReset,ID Vault 中的用户可通过浏览器来重置自己的 Notes 密码。忘记了自己 Notes 密码的用户可以按如下操作来指定新密码。

    该实例正是流程 2 的一种具体应用,用户的身份验证是由 Domino Web 服务器通过验证用户名和 Internet 密码来完成的,密码重置程序则是由 LotusScript. 编写的 agent 程序。

    首先应该对该样例应用程序进行如下设置:

    1. 打开位于 Lotus Domino 服务器数据目录中的 PwdResetSample.nsf 数据库,然后按如下所示修改数据库 ACL:
      • 为将使用该应用程序重置其密码的 ID Vault 用户至少授予“editor”权限。实现此目的的一种方式是确保 -Default- 条目具有“editor”权限。
      • 为将在下一步中用于签署 agent 的 Notes ID 的名称授予“manager”权限。
    2. 在 Domino Designer 中,打开 PwdResetSample.nsf 并执行下列步骤,即,使用具有密码重置权限的 Notes ID 来签署 UserPasswordReset agent。
      • 在“Applications”视图中,单击“Code”-“Agents”,然后双击。
      • 选择 UserPasswordReset agent 后,单击“Sign”。图 4 为 agent 签署前,图 5 为 agent 签署后。


      图 4 . 签署前的 UserPasswordReset agent
      图 4 . 签署前的 UserPasswordReset agent



      图 5. 签署后的 UserPasswordReset agent
      图 5. 签署后的 UserPasswordReset agent

    3. 确定允许 Domino 域中哪些服务器运行 UserPasswordReset。接着在 Domino 目录中的这些服务器所对应的服务器文档中,为 agent 签署者名称授予“Sign or run restricted LotusScript/Java agents”权限。服务器不必是运行 agent 的 Vault 服务器。
    4. 将已签署的 PwdResetSample.nsf 拷贝到将运行该数据库的服务器的数据目录中。
    5. 为以下名称分配密码重置权限,参考图 3:
      • 步骤 2 中签署 agent 的用户的名称。请确保选中“Self-service password reset authority”域。
      • 步骤 3 中允许运行 agent 的每台服务器的名称。
    6. 为遗忘密码的用户指定显示的指示信息,参考图 6,图 7。

      图 6. 用户所属的 Policy 中的 Security Settings 的设置
      图 6. 用户所属的 Policy 中的 Security Settings 的设置



      图 7. 用户登录 Notes 时看到的实际效果
      图 7. 用户登录 Notes 时看到的实际效果

    7. 可以考虑禁用用户在重置密码后必须更改密码的缺省要求,这样重置密码的用户就不需要在事后再次更改密码。
    8. 在允许运行 agent 的服务器上运行 HTTP 任务。

    Notes ID 文件已上载到 ID Vault 的用户现在可以执行下列步骤来重置自己的 Notes 密码:

    1. 启动 Web 浏览器,通过指定如以下所示的 URL 来打开样例应用程序:

      http://< 服务器 >/PwdResetSample.nsf

    2. 登录到 HTTP 服务器。
    3. 在“Reset User Password”页面中,输入新密码并确认,然后单击“Reset My Password”,如图 8。

      图 8. “Reset User Password”页面
      图 8. “Reset User Password”页面

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14751907/viewspace-621811/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14751907/viewspace-621811/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Lotus Domino 8上利用OSGi特性开发和部署插件程序具有许多优势和步骤。 首先,OSGi是一个用于构建可扩展和模块化应用程序的开源框架。在Lotus Domino 8,你可以利用这个框架来开发和部署插件程序,以增强Domino服务器的功能。 开发插件程序首先需要安装Eclipse IDE,这是一种常用的Java开发环境。然后下载和安装IBM Lotus Expeditor插件开发工具包,这是Lotus Domino 8所使用的插件框架。在Eclipse IDE创建插件项目,选择适当的项目类型和设。 接下来,通过使用Eclipse IDE提供的工具,可以编写插件程序的代码。你可以使用Java编写代码,利用OSGi的概念创建各种模块化的组件。例如,你可以定义插件的扩展点和扩展,以及插件的依赖关系。 完成代码编写后,可以使用Eclipse IDE将插件程序打包成一个JAR文件。这个JAR文件包含了所有插件程序的代码和资源文件。 在部署插件程序Lotus Domino 8之前,需要将JAR文件添加到Domino服务器的插件目录。然后,在Domino服务器的控制台输入特定命令以启动插件程序。 通过这些步骤,你可以在Lotus Domino 8上利用OSGi特性开发和部署插件程序。这些插件程序可以增强Domino服务器的功能,并提供更多的定制化选项。同时,利用OSGi的模块化特性,插件程序可以独立开发和部署,不会干扰到Domino服务器的其他部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值