Question

Je voudrais utiliser un serveur LDAP (probablement répertoire Apache ) pour gérer les connexions et les informations d'identification pour un application. De temps en temps, l'application doit travailler en mode déconnecté (sur un ordinateur portable) sans connexion au serveur LDAP.

Quelle est la meilleure façon de reproduire les informations d'identification localy?

Je l'ai déjà pensé à:

  • Utilisation mitose pour répliquer le serveur LDAP sur l'ordinateur portable.

    Mais ce serait une solution tout à fait « lourd » et compliqué. De plus mitose ne semble pas être être encore terminé.

  • Exporter les informations d'identification sous forme de fichier LDIF qui pourraient être stockés sur l'ordinateur portable.

    Mais je besoin d'un moyen de vérifier que le fichier LDIF vient en fait du serveur LDAP (Le fichier doit inclure une sorte de signature). De plus, je voudrais rejeter les fichiers LDIF qui n'ont pas être mis à jour depuis plus d'une semaine. Ce serait bien si je pouvais éviter la mise en œuvre de signer et vérifier l'âge moi-même.

D'autres idées ou des outils qui pourraient me aider?

Edité Edit: J'ai eu un coup d'œil à Kerberos parce que le documentation de l'API Java-Kerberos semble dire qu'il est possible d'utiliser un billet mis en cache dans un contexte local cache et je pensais que cela pourrait être une solution pour moi. De plus Kerberos peut être ajouté en tant que plug-in pour Apache Directory. Mais les magasins de cache Kerberos billets décryptées (visant à les partager avec d'autres applications). Je besoin de la version crypted du billet pour être en mesure de vérifier le mot de passe de l'utilisateur lors d'une session en mode hors connexion. Conclusion:. Kerberos ne propose pas de solution simple à mon problème

Était-ce utile?

La solution 2

Voici la solution que j'ai décidé d'utiliser (je l'ai déjà décrit dans une édition à ma question, mais je voudrais en mesure d'accepter une réponse à « fermer » la question):

Comme je l'ai pas trouvé une autre solution, j'ai décidé d'utiliser une exportation LDIF, ajoutez un horodatage comme commentaire au début du fichier, puis signer le fichier. Pour signer le fichier que je calcule une valeur de hachage (SHA-1) du fichier + une clé secrète. La signature est ajouté comme commentaire au début du fichier. Pour vérifier la signature je supprimer la première ligne du fichier signé et recalcule la valeur de hachage.

Autres conseils

Sachant que il sera probablement ok si l'utilisateur doit se connecter en ligne une fois avant de pouvoir se connecter en ligne , pensez à l'algorithme suivant:

  1. utilisateur fournit l'application avec un (username + password)
  2. application tente de contacter LDAP pour l'authentification
    • travailler en ligne? (Connexion par exemple avec succès)
      1. Application authentifie contre LDAP à l'aide (username + password)
        • succesful d'authentification?
          1. magasins d'applications ou mises à jour hash(password) comme (cached_credentials) pour (username) dans le stockage local sécurisé
          2. produit d'application authentifié [[STOP]]
        • l'authentification a échoué?
          1. produit d'application non authentifié (informations d'identification incorrectes) [[STOP]]
    • mode hors ligne? (Par exemple erreur de réseau)
      1. application tente de récupérer (cached_credentials) pour (username) de stockage local sécurisé
        • (cached_credentials) existe AND plus récente que (1 week)?
          1. application compare (cached_credentials) contre hash(password)
            • match?
              1. produit d'application authentifié [[STOP]]
            • pas de match?
              1. produit d'application non authentifié (informations d'identification incorrectes) [[STOP]]
        • (cached_credentials) n'existe pas OR moins récente que (1 week)?
          1. produit d'application non-authentifié (erreur réseau) [[STOP]]

Ceci est (ou était, IIRC), en passant, le même modèle utilisé par Windows NT + pour l'authentification des utilisateurs contre les contrôleurs de domaine. Lors de la connexion d'une tentative d'authentifier auprès du contrôleur de domaine et créer ou mettre à jour la version locale (mises en cache) du profil de l'utilisateur. Si le contrôleur de domaine n'est pas disponible, l'utilisateur est invité à procéder à l'authentification contre les informations d'identification saisies dans le profil local (en cache) (le cas échéant).


EDIT

  • Oui, cela est, dans l'esprit, la même solution que la copie d'un fichier LDIF localement, sauf que vous n'avez pas à analyser LDIF lorsque vous êtes déconnecté. :)
  • Il est entendu que vous pouvez stocker des attributs supplémentaires (autorisations, etc.) dans votre cache
  • Il est également entendu que « le stockage sécurisé » est au moins signé. :) Vous pouvez le faire assez facilement avec un hachage SHA-1 et un secret, ou vous pouvez utiliser des fournisseurs de chiffrement à part entière disponibles sur votre plate-forme (ou en Java, si vous utilisez Java.) Vous n'avez pas besoin de crypte aussi longtemps car aucune information secrète est stockée à l'intérieur.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top