2012-08-06 2 views
48

Je suis intéressé par la création de clés API pour web.api et permets aux clients de communiquer avec l'API en utilisant les clés API plutôt qu'avec l'autorisation fournie par web.api.API Web créant des clés API

Je souhaite que plusieurs clients puissent communiquer avec web.api. Au lieu de créer un nom d'utilisateur et un mot de passe, puis-je utiliser une clé API et permettre aux clients de communiquer avec le client.

existe-t-il une telle fonctionnalité intégrée?

Si on veut l'implémenter, comment le contournerais-tu?

Répondre

55

Vous pouvez réaliser en utilisant HMAC Authentication. Fondamentalement, il pourrait y avoir une table de base de données appelée ApiKey (apiKey, secretKey). Chaque client a chaque apikey et clé secrète:

  1. apikey est comme une clé publique et sera envoyé sur HTTP (avec nom d'utilisateur similaire). La clé secrète n'est pas envoyée via HTTP, utilisez cette clé secrète pour faire des informations hmac et envoyer une sortie hachée au serveur. Du côté serveur, basé sur la clé publique, vous pouvez obtenir la clé secrète et les informations de hachage à comparer avec la sortie de hachage.

J'ai posté la réponse détaillée à: How to secure an ASP.NET Web API

Vous pouvez modifier Nom d'utilisateur par apikey et Hashed Mot de passe par clé secrète sur ma réponse à la carte avec votre idée.

+0

Vous aurez donc besoin du client pour construire le Hash à chaque demande d'API? Quels sont les frais généraux impliqués ici? – EkoostikMartin

+0

Je pense que c'est ainsi que travaille HMAC, pourriez-vous élaborer vos questions? –

+0

Si vous appelez 'ComputeHash (string hashedPassword, string message)' sur chaque méthode que le client appelle, combien de temps cela ajoute-t-il à chaque appel? Combien de temps 'ComputeHash' prend-il pour terminer en moyenne? – EkoostikMartin