Comment puis-je stocker la clé et le secret du consommateur OAuth v1 pour un client Twitter de bureau open source sans les révéler à l'utilisateur?

32

Je veux créer un client Twitter open-client de bureau épais. Il se trouve que j'utilise .NET comme langue et Twitterizer comme enveloppe OAuth / Twitter, et mon application sera probablement publiée en open source.

Pour obtenir un jeton OAuth, quatre informations sont nécessaires:

  1. Jeton d'accès (nom d'utilisateur twitter)
  2. Access Secret (mot de passe twitter)
  3. La clé du consommateur
  4. Secret du consommateur

Les deux deuxièmes informations ne doivent pas être partagées, comme une clé privée PGP. Cependant, en raison de la façon dont le flux d'autorisation OAuth est conçu, ceux-ci doivent être sur l'application native. Même si l'application n'était pas open source et que la clé / secret du consommateur était cryptée, un utilisateur raisonnablement qualifié pourrait accéder à la paire clé / secret du consommateur.

Donc ma question est, comment puis-je contourner ce problème? Quelle est la stratégie appropriée pour qu'un client Twitter de bureau protège sa clé et son secret de consommateur?

Justin Dearing
la source
+1 J'ai moi aussi cette même inquiétude. Cependant, la question n'est pas réellement spécifique aux environnements de bureau ou à Twitter - ce schéma d'authentification est très courant parmi les services Web, je crois?
vemv
Parce que votre question peut être résumée à quelque chose comme "comment stocker des données secrètes sur un client", je pense que vous pourriez être en mesure d'attirer plus de réponses si vous postez une nouvelle question qui est moins spécifique à Twitter. OMI.
Jeff Welling
1
+1 Je suis également curieux de savoir quelle est la meilleure pratique ici. Dans mon application Qt, j'utilise OAuth mais je stocke simplement les détails du consommateur sous forme de chaînes (QString) dans le binaire.
fejd
1
Jeff, c'est une très bonne possibilité que je fasse quelque chose de complètement faux avec OAuth. Je commence à avoir le sentiment que je suis supposé utiliser la paire clé client / secret pour générer des secrets temporaires et qu'avoir un service Web pour générer ces secrets quelque part est la voie à suivre. Généraliser cette question au-delà d'OAuth manquera des réponses comme ça.
Justin Dearing

Réponses:

5

J'ai trouvé une réponse qui reflète le chemin que j'envisageais de suivre sur hueniverse . L'article, Au-delà du flux de redirection Web OAuth , propose quelques suggestions, l'une d'entre elles étant une URL Web qui fait office de proxy pour le processus d'échange de jetons. Je dois trouver un moyen d'authentifier correctement que mon application est ce qui demande l'authentification sur cette page proxy. Mais c'est possible.

Justin Dearing
la source
3

Je me trompe peut-être, mais si vous regroupez des clés avec l'application de bureau ou mobile, open source ou non, il est possible d'y accéder. Si des services comme Twitter et Tumblr nous obligent à utiliser l'API OAuth uniquement, nous avons deux options:

  • configurer un service proxy d'authentification pour chaque application
  • regrouper les clés avec l'application

Le premier est plus difficile et coûteux, pas nécessairement maintenable pour les petites applications open source. Ce dernier signifie que l'application peut être et sera bloquée une fois que les spammeurs auront volé les clés. Comme Twitter et Tumblr ne donnent pas encore une meilleure option, et vissent tous les clients de bureau, clients Open Source inclus, il est proposé de distribuer des clés "Big Fish" et de les utiliser comme solution de rechange .

Enfin, il existe une option pour forcer chaque utilisateur à obtenir des clés API.

sastanin
la source
3

La section 4.6 de la RFC 5849 , qui définit OAuth 1, indique que le secret du consommateur n'a jamais été destiné à être utilisé par les consommateurs de bureau, malgré l'utilisation de Twitter de celui-ci dans la pratique. Comme l'a souligné Nelson Elhage dans " Cher Twitter ", Twitter peut et résilie les clés de consommation des clients de bureau, à condition que le client ne soit pas trop gros pour échouer. Mais il existe deux solutions de contournement pour permettre l'utilisation d'OAuth 1 dans une application de bureau ou mobile.

Une façon consiste à proxy l'ensemble du protocole Twitter via un serveur que vous exploitez. De cette façon, le secret du consommateur reste sur votre serveur. Il s'agit de la solution de contournement recommandée par Dick Hardt , éditeur de la spécification OAuth 1. Cette solution de contournement ne résout pas le coût d'exploitation de ce serveur.

L'autre façon, comme suggéré dans un article de Raffi Krikorian au groupe Google de discussion sur le développement de Twitter et un article de Chris Steipp sur une liste de diffusion Wikipédia, consiste à "demander à chaque utilisateur d'enregistrer sa copie de votre application de bureau en tant que propre consommateur". Ensuite, l'utilisateur copiera et collera la clé de consommateur et le secret de consommateur nouvellement enregistrés dans votre application. Le manuel de votre application devrait alors inclure des instructions détaillées sur la façon d'enregistrer une nouvelle application sur le site des développeurs de Twitter. Cette limitation officielle présente quelques problèmes pratiques:

  • Votre client sera confronté à un inconvénient de convivialité par rapport aux clients propriétaires bien connus.
  • Le formulaire pour créer une nouvelle application ne semble pas offrir un moyen de préremplir les champs obligatoires. Cela signifie que vous devrez mettre à jour la procédure d'enregistrement dans votre manuel chaque fois que Twitter modifie la procédure d'enregistrement d'une application.
  • L'accord de développeur exige que les utilisateurs soient majeurs pour conclure un contrat contraignant. Cela signifie qu'un utilisateur de votre application âgé de 13 à 17 ans doit avoir un parent accepter l'accord au nom de l'utilisateur.
  • La politique des développeurs de Twitter interdit les applications d'enregistrement en masse et le «squattage de noms», qu'il définit comme «l'envoi de plusieurs applications avec la même fonction sous des noms différents». Je ne connais aucun précédent sur la question de savoir si Twitter a traité des utilisateurs indépendants qui ont enregistré des copies distinctes d'une application comme des "squatters de noms".
Damian Yerrick
la source
-2

Je vais répondre, mais sachez que je n'ai pas traité cela moi-même, je m'éloigne des meilleures pratiques et de l'expérience pertinente existante;

Je ne m'en inquiéterais pas trop. Si votre client est open source, il aura quand même accès à la source, et essayer de contrôler ce qu'il fait avec votre programme va de toute façon contre la nature de l'open source (bien que ce qui est important, ce que vous essayez de faire ne le fasse pas ).

Si quelqu'un a suffisamment de connaissances pour déboguer votre programme et extraire votre clé, il sait probablement comment faire plus que cela et vous pourriez très bien perdre votre temps à essayer de verrouiller davantage.

Par précaution, je changerais les clés de temps en temps (si possible), mais si tout ce qu'ils peuvent faire est de faire semblant d'être votre programme, cela ne me semble pas trop sérieux.

Divulgation complète, je ne connais pas l'API Twitters, l'API Twitterizer, les exigences Oauth ou tout ce que j'ai dit qui semble discutable;)

Jeff Welling
la source
4
Il ne s'agit pas d'essayer de contrôler ce qu'ils font avec le programme, mais de se faire une fausse image. La clé et le secret du consommateur sont la façon dont je dis à Twitter "cette application est venue par moi" un peu comme un certificat SSL fournit la confiance. Je ne distribuerais jamais un certificat SSL avec une application Web que j'ai écrite. Si les gens modifient mon application, ils doivent en effet demander leur propre clé / secret consommateur et s'inscrire en tant qu'auteur de l'application sur Twitter pour leur construction.
Justin Dearing
Excellent point, j'avais une suspicion furtive à savoir à quoi servait la clé de consommateur, mais je n'en savais pas trop. Dans ce cas, pour être honnête, je ne pense pas qu'il est un moyen de protéger votre application. Pour moi, cela ressemble à Twitter a choisi cette méthode pour que les applications mobiles puissent être écrites, mais pas celles de bureau - les plates-formes mobiles sont largement verrouillées. Dans ce cas, la meilleure façon d'aller à l'OMI est de mettre la clé dans un fichier ou une variable distincte que vous ne publiez pas avec le code source. À ma connaissance, cela ne va pas à l'encontre de la GPL. J'aimerais bien me tromper sur tout ou partie de cela ..
Jeff Welling
-4

La clé et le secret du consommateur sont liés à l'application et non à l'utilisateur. Avec ces informations, le fournisseur OAuth sait avec quelle application il traite. Le reste, le jeton d'accès et le secret seront obtenus après les premières étapes.

Voir cet article de blog pour plus d'informations car il montre comment fonctionne le protocole.

Yblih
la source