5

LDAP サーバー (おそらくApache ディレクトリ) を使用して、アプリケーションのログインと資格情報を管理したいと考えています。アプリケーションは、LDAP サーバーに接続せずに (ラップトップで) オフラインで作業する必要がある場合があります。

資格情報ローカルをレプリケートする最良の方法は何ですか?

私はすでに考えました:

  • Mitosisを使用してラップトップに LDAP サーバーを複製します。

    しかし、それは非常に「重く」複雑な解決策になります。さらに有糸分裂はまだ終わっていないようです。

  • 資格情報を、ラップトップに保存できる LDIF ファイルとしてエクスポートします。

    しかし、LDIF ファイルが実際に LDAP サーバーからのものであることを確認する方法が必要です (ファイルには一種の署名が含まれている必要があります)。さらに、1 週間以上更新されていない LDIF ファイルを拒否したいと思います。署名と年齢チェックを自分で実装することを回避できればいいのにと思います。

私を助けることができる他のアイデアやツールはありますか?

編集編集:Java-Kerberos-APIのドキュメントには、ローカルキャッシュでキャッシュされたチケットを使用できると書かれているようで、これが解決策になると思ったので、Kerberosを調べました。さらに、Kerberos をプラグインとして Apache ディレクトリに追加できます。ただし、Kerberos キャッシュには復号化されたチケットが格納されます (他のアプリケーションと共有することを目的としています)。オフライン セッション中にユーザー パスワードを確認できるようにするには、チケットの暗号化されたバージョンが必要です。結論: Kerberos は、私の問題に対する単純な解決策を提供しません。

4

2 に答える 2

5

ユーザーがオフラインでログオンする前に一度オンラインでログオンする必要がある場合はおそらく問題ないことを知っているので、次のアルゴリズムを検討してください。

  1. ユーザーがアプリケーションに(username + password)
  2. LDAPアプリケーションは認証のため に連絡を試みます
    • オンラインで働いていますか?(例:接続成功)
      1. アプリケーションは、を使用してLDAPに対して認証します(username + password)
        • 認証は成功しましたか?
          1. アプリケーションは、ローカルの安全なストレージに保存または更新 hash(password)ます(cached_credentials)(username)
          2. アプリケーションは認証されたとおりに進行します [[STOP]]
        • 認証に失敗しました?
          1. アプリケーションは認証されていない(誤ったクレデンシャル)として進行します[[STOP]]
    • オフラインで作業していますか?(例:ネットワークエラー)
      1. アプリケーションは、ローカルの安全なストレージから 取得(cached_credentials)を試みます(username)
        • (cached_credentials)ANDより最近存在し(1 week)ますか?
          1. アプリケーションはと比較(cached_credentials)しますhash(password)
            • マッチ?
              1. アプリケーションは認証されたとおりに進行します [[STOP]]
            • 歯が立たない?
              1. アプリケーションは認証されていない(誤ったクレデンシャル)として進行します[[STOP]]
        • (cached_credentials)ORより最近では存在しません(1 week)か?
          1. アプリケーションは認証されていない状態で進行します(ネットワークエラー)[[STOP]]

ちなみに、これは、ドメインコントローラーに対するユーザー認証のためにWindows NT +で採用されているのと同じモデルです(または、IIRCでした)。ログイン時に、ドメインコントローラーに対して認証を行い、ユーザープロファイルのローカル(キャッシュ)バージョンを作成または更新しようとします。ドメインコントローラーが使用できない場合、ユーザーは、ローカル(キャッシュ)プロファイルにキャプチャされた資格情報(存在する場合)に対する認証を続行するように求められます。


編集

  • はい、これは精神的には、ldifファイルをローカルにコピーするのと同じ解決策ですが、オフラインのときにldifを解析する必要がない点が異なります。:)
  • 追加の属性(権限など)をキャッシュに保存できることを理解しています。
  • 「安全なストレージ」は少なくとも署名されていることも理解されています。:)これは、SHA-1ハッシュとシークレットを使用して簡単に行うことができます。または、プラットフォーム(または、Javaを使用している場合はJava)で利用可能な本格的な暗号化プロバイダーを使用できます。内部には秘密情報が保存されていないためです。
于 2009-02-25T23:46:36.780 に答える
1

これが私が使用することにした解決策です(質問の編集ですでに説明しましたが、質問を「閉じる」ための回答を受け入れたいと思います):

別の解決策が見つからなかったため、LDIF エクスポートを使用し、ファイルの先頭にコメントとしてタイムスタンプを追加してから、ファイルに署名することにしました。ファイルに署名するには、ファイルのハッシュ値 (SHA-1) + 秘密鍵を計算します。署名は、ファイルの先頭にコメントとして追加されます。署名を確認するには、署名済みファイルの最初の行を削除し、ハッシュ値を再計算します。

于 2011-12-08T10:13:48.510 に答える