60 votes

Stockage sécurisé des identifiants OpenID et des jetons OAuth

Je suis en train de créer une application qui va utiliser OpenID des connexions et des jetons d'authentification OAuth avec Youtube. Je suis actuellement en train de stockage de l'identité OpenID et OAuth jeton/jeton secret en texte clair dans la base de données.

Est-il inapproprié pour stocker ces valeurs en tant que texte brut? Je pourrais utiliser un chiffrement à sens unique pour l'identifiant OpenID, mais je ne sais pas si c'est nécessaire. Pour les jetons d'authentification OAuth, j'aurais besoin de l'utiliser dans les deux sens de chiffrement que mon appli repose sur l'obtention du jeton de session pour certaines utilisations.

Est-il nécessaire de chiffrer l'identité OpenID? Quelqu'un pourrait l'utiliser pour accéder au compte d'un utilisateur?

27voto

Feha Points 206

Tout d'abord, il y a une application qui a consumer_key et consumer_secret.

Lorsque les utilisateurs s'authentifient et "permettre" de votre application, vous obtenez de retour: un access_token qui est considéré comme l'utilisateur "mot de passe" et permettrait JUSTE de VOTRE demande d'agir au nom de l'utilisateur.

De sorte, obtenir l'utilisateur access_token de votre base de données n'aidera pas beaucoup si elles n'avez pas l' consumer_key et consumer_secret pour un accès complet.

Le fournisseur de service compare tous les 4 paramètres sur demande. Il serait intelligent pour chiffrer ces 4 paramètres avant de les stocker et de les déchiffrer avant réponse.

C'est seulement lorsque vous en avez besoin pour mettre à jour ou de faire des changements à l'utilisateur des ressources du propriétaire pour le compte d'un utilisateur. Pour empêcher un utilisateur connecté sur votre site, des sessions d'utilisation.

19voto

Pelle Points 325

Le Jeton OAuth et Secret, tous deux doivent évidemment être conservés en lieu sûr dans votre base de données, mais vous ne pouvez pas stocker à l'aide de 1 moyen de chiffrement de la même manière que vous le feriez pour un mot de passe. La raison en est que vous avez besoin de le jeton et le secret pour être en mesure de signer la demande.

Ce serait également le cas si vous utilisez un serveur OAuth, vous avez encore besoin de l'original de jeton/secret de vérifier la demande.

Si vous voulez vous pouvez toujours les chiffrer à l'aide d'une 2 voies algorithme de chiffrement tels que AES à offrir une sécurité dans le cas où votre base de données ou des sauvegardes de base de données se compromise.

13voto

Ben Walther Points 495

Il y a ici deux écoles de pensée.

Le premier argument est que: vous devez traiter OAuth jetons comme des mots de passe. Si tout le monde venait à accéder à votre base de données, obtenir tous les OpenID/OAuth paires et exécuter un man-in-the-middle attack, ils pourraient usurper l'identité d'un utilisateur sur votre site.

Le deuxième argument est ceci: au moment où quelqu'un a accès à votre base de données et un accès à votre réseau pour exécuter un man-in-the-middle attaques, vous êtes arrosé de toute façon.

Je serais personnellement err sur le côté de la prudence et seulement les chiffrer; c'est une pratique standard pour les mots de passe, de sorte que vous pourriez aussi bien vous donner ce petit plus de la paix de l'esprit.

En attendant, Google a ce conseil:

"Les jetons doivent être traités de façon sécurisée toutes les autres informations sensibles stockées sur le serveur."

source: http://code.google.com/apis/accounts/docs/OAuth.html

Et certains aléatoire gars sur le web a des conseils de mise:

  • Si ils sont sur les régulièrement un fichier de disque, de les protéger à l'aide du système de fichiers autorisations, assurez-vous qu'ils sont chiffré et masquer le mot de passe bien
  • Si ils sont dans une base de données à chiffrer les champs, stocker la clé eh bien, et de protéger l'accès à la la base de données elle-même avec soin. *
  • Si ils sont dans LDAP, faire la même chose.

http://brail.org/wordpress/2009/05/01/implementing-oauth-take-care-with-those-keys/

1voto

ZZ Coder Points 36990

URL OpenID ne devrait pas être chiffré parce que c'est votre "open id" littéralement, tout le monde devrait connaître la valeur. En outre, l'URL doit être un index dans la base de données et il est toujours difficile de chiffrer l'index dans la base de données.

Jeton OAuth/secret doit être secrète de chiffrement et peut améliorer la sécurité si vous devez stocker le jeton à long terme. Dans notre OAuth application consommateur, jeton/secret n'est stocké dans la session pour une courte durée et nous choisissons de ne pas les chiffrer. Je pense que c'est assez sécurisé. Si quelqu'un peut coup d'oeil dans notre stockage de session, ils ont probablement notre clé de chiffrement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X