2009-02-24 121 views
4

我想使用LDAP服務器(可能是Apache directory)來管理應用程序的登錄和憑證。有時,應用程序需要脫機工作(在筆記本電腦上),而無需連接到LDAP服務器。如何離線使用LDAP憑證?

複製locale的最佳方式是什麼?

我已經想到了:

  • 使用Mitosis複製筆記本電腦上的LDAP服務器。

    但這將是一個相當「沉重」和複雜的解決方案。此外,有絲分裂似乎還沒有完成。

  • 將證書導出爲可存儲在筆記本電腦上的LDIF文件。

    但我需要一種方法來檢查LDIF文件實際上是否來自LDAP服務器(該文件應包括一種簽名)。此外,我想拒絕超過一週未更新的LDIF文件。如果我可以避免自己實施簽名和年齡檢查,那將會很好。

任何其他想法或工具可以幫助我嗎?

編輯編輯:我在Kerberos在看,因爲documentation of the Java-Kerberos-API似乎是說,有可能在本地緩存中使用緩存的票,我想這可能是我一個解決方案。此外,Kerberos可以作爲插件添加到Apache Directory。 但Kerberos緩存存儲解密的票據(旨在與其他應用程序共享)。我需要加密的票證版本才能在脫機會話期間檢查用戶密碼。結論:Kerberos不提供解決我的問題的簡單方法。

+0

筆記本電腦下線後,從未登錄過的用戶是否必須登錄才能登錄? – vladr 2009-02-24 23:10:36

+0

如果用戶必須先登錄一次才能登錄離線,那麼這可能會很好。 – Name 2009-02-25 07:53:13

回答

1

這裏是解決方案,我決定使用(我已經描述了它在編輯我的問題,但我想能接受的答案爲「關閉」的問題):

由於我還沒有找到其他解決方案,我決定使用LDIF導出,在文件的開頭添加時間戳作爲註釋,然後對文件進行簽名。爲了對文件進行簽名,我計算了文件的哈希值(SHA-1)+密鑰。該簽名在文件的開頭添加爲註釋。爲了檢查簽名,我刪除了簽名文件的第一行並重新計算散列值。

4

明知它很可能是確定的,如果用戶必須能夠脫機登錄之前曾經在網上登錄,請考慮以下算法:

  1. 用戶提供您的應用程序與(username + password)
  2. 應用程序試圖聯繫LDAP認證
    • 聯機工作? (例如連接成功的)
      1. 應用認證反對使用(username + password)
        • 認證成功的LDAP?
          1. 應用商店或更新​​爲(cached_credentials)(username)到本地安全存儲
          2. 應用所得款項用作認證[[STOP]]
        • 驗證失敗?
          1. 應用程序繼續作爲未驗證(不正確的憑證)[[STOP]]
    • 離線工作? (如網絡錯誤)
      1. 應用程序試圖檢索(cached_credentials)(username)從本地安全存儲
        • (cached_credentials)存在比(1 week)AND更近?
          1. 應用比較(cached_credentials)對​​
            • 比賽?
              1. 應用程序繼續作爲認證[[STOP]]
            • 沒有匹配?
              1. 應用程序繼續作爲未驗證(不正確的憑證)[[STOP]]
        • (cached_credentials)不存在比(1 week)OR少最近?
          1. 應用程序繼續作爲未驗證(網絡錯誤)[[STOP]]

這是(或者是,這個),由這種方式與Windows NT +用於用戶身份驗證的模式相同針對域控制器。登錄後,將嘗試對域控制器進行身份驗證,並創建或更新用戶配置文件的本地(緩存)版本。如果域控制器不可用,用戶會被提示針對本地(緩存)配置文件中捕獲的憑據的身份進行(如果存在的話)。


編輯

  • 是,從本質上講,這與在本地複製ldif文件的解決方案相同,不同之處在於,在脫機時不必解析ldif。 :)
  • 據瞭解,您可以在緩存中存儲任何附加屬性(權限等)
  • 也可以理解,'安全存儲'至少是簽名的。 :)您可以使用SHA-1散列和祕密輕鬆完成此操作,也可以使用您的平臺上提供的完整密碼提供程序(如果使用Java,則使用Java)。您不需要長時間隱藏密碼因爲沒有祕密信息存儲在裏面。