在 Lotus Domino 8.5 ID Vaullt 中編寫密碼重置程式

genusBIT發表於2009-12-07
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章