Les GUID ne sont généralement pas assez "aléatoires" et peuvent facilement être devinés par les méchants. Prenez quelques données «aléatoires» comme le hash du mot de passe de l'utilisateur, quelques nombres aléatoires et exécutez le résultat via sha1 ou une fonction de hachage similaire.
Si vous voulez une clé API par compte, ajoutez-la simplement à la table de métadonnées du compte. Sinon, utilisez une table liée à accountIds pour stocker les clés api. Côté serveur, utilisez un cache en utilisant la clé API comme clé pour stocker temporairement les métadonnées du compte. Vous n'avez donc besoin d'accéder à la base de données qu'une fois par session.
Et bien sûr, tout doit aller sur https pour éviter que la clé API soit volée. Maintenant, si votre service est orienté "session", vous pouvez envisager d'utiliser une clé de session temporaire afin de ne pas avoir à exposer la clé API. Recherchez le cryptage de clé publique pour approfondir cette question.
« Guids ne sont généralement pas assez aléatoires et peuvent être facilement devinés »? Je ne suis pas sûr d'être d'accord avec ça. http://stackoverflow.com/questions/184869/are-guid-collisions-possible – toxaq
Une partie du GUID est liée à la machine, souvent l'adresse IP ou MAC, l'heure de la journée, l'adresse de l'objet générant l'UID, une séquence compteur. Cela rend astronomiquement improbable que le même ID est généré dans des conditions normales d'utilisation. Cependant un attaquant qui veut créer une collision peut utiliser un autre GUID pour déterminer les bits communs et deviner les bits 'changeants' qui sont un sous-ensemble relativement petit qui est beaucoup plus facile à force brute. En fait, les réponses à la question à laquelle vous faites référence illustrent bien cela. –
Je ne crois pas que ce soit encore vrai pour UUID v4, qui devrait être entièrement "aléatoire", et c'est ce qui devrait être utilisé. Est-ce que votre hypothèse qu'un GUID n'est pas adapté à une clé API? – toxaq