Nous avons une application Web qui est apatride. Nous utilisons http Authentification sur SSL / TLS. Les navigateurs de l'utilisateur sont considérablement stocker des informations d'authentification (éventuellement même après la fermeture d'un navigateur si elles configurent leurs navigateurs de cette façon.) Nous validons les sur tous les accès. P>
Pour des raisons qui devaient surtout faire avec la convivialité, nous aimerions pour arrêter d'utiliser l'authentification HTTP. Y a-t-il une manière raisonnable mettre en œuvre la connexion utilisateur et p>
Par exemple, nous sommes prêts à utiliser des cookies et pourraient stocker le Nom d'utilisateur et mot de passe comme cookie. Cependant, cela semble moins sécurise. Mais est-ce? Si nous utilisons un cookie non persistant, est-ce moins sécurisé que n'importe quelle méthode qu'un navigateur utilise pour stocker Critiques pour la durée de la session ou plus longtemps? P>
Nous pourrions stocker le nom d'utilisateur et un hachage du mot de passe comme suggéré ici: Que dois-je stocker dans des cookies pour mettre en œuvre "mémoriser moi" lors de la connexion utilisateur mais c'est que mieux? P>
Nous pourrions stocker un jeton aléatoire comme un cookie, mais nous devons ensuite Gardez une table de recherche (session) sur le serveur et devenir Indiquez. P>
Nous pourrions stocker une version cryptée des références en tant que
Cookie, puis déchiffrer et valider tous les accès. Cette
semble em> comme il est légèrement plus sûr que http
authentification et ne nécessite également pas d'état. Cependant, je suis
Pas sûr que nous voulons les frais généraux supplémentaires du décryptage. Et est-ce vraiment plus sûr? Si quelqu'un reçoit une copie de la chaîne cryptée (ou hachée, comme ci-dessus), ne leur donne pas le même accès que s'ils avaient le mot de passe? P>
J'apprécierais vos pensées, mais commençons par le
hypothèse que l'authentification HTTP sur SSL / TLS est sécurisée
assez em> à nos fins et nous voulons rester apatrides. P>
Edit p>
Après plus d'autres recherches, je pense que cette question Stackoverflow question: Sessions latérales du client stipule le problème beaucoup mieux et les réponses sont également mieux mieux. Merci à tous pour votre contribution. P>
3 Réponses :
Je ne vois pas de jeton aléatoire comme étant plus ou moins apatride qu'un nom d'utilisateur et un mot de passe. P>
Les deux doivent être levés sous une forme de base de données. Votre application avait déjà un État. L'état d'authentification ou non authentifié. p>
Le nom d'utilisateur et le mot de passe en cours d'envoi étaient exactement les mêmes qu'un jeton aléatoire. P>
Donc, ma réponse à votre question est n °. Une application Web ne peut implémenter aucune forme d'authentification de l'utilisateur et rester apatride. P>
Je ne pense pas que l'application a de l'état. Il ne stocke pas l'état de «authentifié ou non authentifié» sur des demandes. Chaque demande est ré-authentifiée.
@BMB: Bien sûr, il stocke l'état. Sur le serveur est une base de données de qui est authentifiée qui récupère l'état actuel pour chaque demande.
Si par État, vous voulez dire qui compte un compte avec nous, puis oui, nous stockons cet état. Mais nous ne stockons pas une base de données de qui est authentifiée sur une seule demande que nous lisons dans une demande ultérieure. La demande suivante fait une nouvelle authentification.
@BMB: et avec un jeton aléatoire, pour chaque demande, vous feriez une nouvelle authentification par jeton de jeton. Même chose.
Vous voudrez peut-être consulter sessions PHP comme alternative aux cookies. P>
Vous pouvez démarrer une session avec un seul appel à session_start () code>
. p>
de là, vous pouvez stocker toutes les données que vous souhaitez sur l'utilisateur avec la session globale Cela ne tient pas compte de la manière dont vous allez authentifier les utilisateurs en premier lieu. Cela se fait généralement en recherchant des noms d'utilisateur / mot de passe stockés dans une base de données. P> _ session code> tableau. p>
Dans un système fermé (Intranets d'entreprise ou juste un site normal, mais avec une foule petite, décemment distincte), la validation du certificat SSL serait préférable. Émettez un certificat pour chaque utilisateur, laissez-les installer dans leurs navigateurs et vous pouvez révoquer l'accès à ce certificat à tout moment (voir par exemple le système d'identification SSL-CERT de myopenid.com (malheureusement Buggy A.M.). P>
Cela nécessiterait des travaux sur la partie de votre utilisateur, et si cela n'est pas possible / souhaitable, un jeton cookie serait de loin préférable et si vous recherchez un combo utilisateur / passwd ou un jeton de cookie ne devrait pas faire autant une différence. p>
Nous n'avons pas de système fermé, les certificats installés par l'utilisateur ne sont pas une option. La différence que je vois entre un cookie "jeton" (si nous parlons de quelque chose de hasard) et que l'utilisateur / mot de passe est que le jeton doit être régénéré et stocké sur le serveur sur chaque demande. Je n'ai pas à mettre à jour l'utilisateur / mot de passe sur le serveur sur chaque demande.
Dans quel logiciel utilisez-vous comme serveur et base de données, ainsi que quelle langue générez-vous les pages?
@sigint, l'application est écrite en PHP sur Apache. Il n'y a pas de base de données. Pourquoi est-ce important?
Si d'autres utilisateurs (SO) savent quels outils vous disposez, ils vont essayer de vous fournir une solution qui utilise ces outils.