2008-12-31 19 views
2

Je cherche à construire une API et envisageais OAuth pour gérer l'accès à l'api, mais ce que je fais est plus d'un système B2B permettant aux entreprises d'accéder aux données à intégrer dans leurs sites . Je n'aurai pas de b2c au début.Comment gérer les clés api

Alors oauth ne semble pas l'outil pour moi, je cherchais des sources en ce qui concerne la construction d'un système de clé, mais ne l'ai pas rencontré quoi que ce soit.

Est-ce que quelque chose est déjà disponible? Est-il préférable de créer simplement un hachage de certaines données soumises par l'utilisateur ou quelque chose comme ça?

Répondre

2

Qu'est-ce que vous avez besoin est juste quelque chose qui identifie de manière unique l'utilisateur ... Il suffit d'utiliser un UUID ou peut-être un hachage d'un UUID. Assurez-vous simplement que cet ID est passé sur un canal sécurisé, si vous le transmettez sur un canal non sécurisé, vous devrez peut-être implémenter une méthode de sécurisation de l'ID similaire à l'authentification Digest HTTP.

0

Je n'utiliserais pas seulement les données soumises par les utilisateurs, car cela pourrait créer une situation où les clés de l'API peuvent être devinées. Généralement, je prends des données qui sont générées par l'utilisateur, puis le combiner avec des données relativement uniques (c'est-à-dire l'heure actuelle du système) et hacher que SHA-1 ou quelque chose, peut-être changer la représentation si je ne Je veux évidemment que ce soit un hachage SHA-1, puis l'utiliser comme clé.

1

Jetez un coup d'œil à presque n'importe quel site/service Web 2.0. Ils ont tous des degrés variables d'authentification et de gestion des clés API. Flickr, Twitter, Github, etc.

+0

droit, mais en regardant les services ne sont pas vraiment donner beaucoup d'une indication sur la gestion des clés et auth (pas que je peux reconnaître de toute façon). – pedalpete

1

Selon les besoins, dans le monde des API Web, donner à vos partenaires/développeurs une clé API (identification) et exiger qu'ils signent les appels (authentification) est assez standard. Il y a beaucoup de façons de spécifier les signatures. Un assez commun ces jours-ci est; prenez tous les paramètres de l'appel, un horodatage (+/- 5 min), un secret partagé et hachez-le en utilisant SHA-1 ou MD5 (mieux SHA-1).

Vous pouvez soit le faire vous-même mettre en œuvre ou de trouver un partenaire (il y a quelques-uns) de le faire pour vous.

1

La méthode générale proposée ici (pour utiliser un hachage qui comprend une clé API et l'heure actuelle) sont tous bons - certainement mieux que d'inclure un dans le message « mot de passe ». Cependant, il existe une manière cryptographique standard de réaliser cette opération "mung" appelée HMAC. Il vaut la peine de regarder si vous voulez quelque chose de plus standard/robuste/sûr. Enfin, il y a évidemment le «gold standard» des options de sécurité - utiliser un certificat numérique pour signer toutes les requêtes (peut être coûteux en calcul) ou utiliser pour signer une requête initiale qui génère alors une clé de session d'utilisation limitée (par ex. API uniquement, avec une expiration après 60 minutes).

Sinon, vous pouvez utiliser SSL 2 voies pour la couche de transport et la confiance simplement que dans l'application/API.

dépend vraiment comment sécurisé vous le voulez ...:]