2009-02-24 59 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)。您不需要长时间隐藏密码因为没有秘密信息存储在里面。