Comment mettre en œuvre l'Authentification HMAC dans un cadre Reposant WCF API
Nous sommes la construction d'une API RESTful en utilisant WCF (à l'heure actuelle .Net 3.5, mais allez déménager .Net 4 bientôt). Nous avons un cadre fonctionnel en place, mais il est actuellement non garantis. Il devra être accessible à partir de .Net applications iOS, Android et web applications.
Nous aimerions utiliser un schéma d'Authentification HMAC comme décrit ici et ici, mais les deux exemples semblent tomber en morceaux quand décrivant comment valider le code de hachage. Le premier exemple ne parvient pas à décrire la UserKeys objet (table de hachage?) et le deuxième exemple est absent de la GetUserKey des méthodes sur le client et côté serveur.
Quelqu'un peut-il fournir une explication de la façon dont la "Clef"/jeton est généré/stocker/extrait/utilisé dans ces exemples ou de fournir un meilleur exemple (avec le code source, si possible) d'utilisation de HMAC Autorisation dans un cadre Reposant service WCF?
Edit:
Après d'autres recherches, nous avons déterminé que nous avions besoin de plus d'un "Autorisation" technique " plutôt qu'un "L'authentification" la technique (la sémantique). Nous avons mis en place de Base Autorisation et sécurisé de l'API derrière SSL. La Base Autorisation utilise le même "Autorisation" de l'en-tête de la Requête web comme le HMAC Authentification régime, mais passe nom d'utilisateur:mot de passe chaîne encodée en Base64 au lieu d'un jeton. Cela nous a permis de coutume-valider un utilisateur à l'encontre de notre base de données pour déterminer si l'utilisateur est autorisé et dispose des droits en matière de sécurité pour accéder à l'souhaité méthode de l'API.
Nous sommes certainement à l'écoute d'autres options sur la façon de réaliser personnalisé nom d'utilisateur/mot de passe de validation et d'autres méthodes de sécurisation de l'API.
OriginalL'auteur Steven King | 2011-12-02
Vous devez vous connecter pour publier un commentaire.
De la récupération de la clé utilisateur est juste un détail d'implémentation, vous pouvez le faire de la manière que vous voulez, mais sur le serveur, il est souvent stockées dans une base de données avec le nom de l'utilisateur.
L'approche de base est très simple.
Vraiment la seule partie délicate est le partage d'une clé secrète de l'utilisateur et le garder en sécurité. C'est pourquoi certains services de permettre la génération de clés partagées avec une durée de vie limitée, de sorte que vous pouvez donner les clés à un tiers à travailler temporairement sur votre nom.
La première étape de tout régime d'autorisation est l'authentification. Après tout, comment pouvez-vous décider si un tiers est autorisé à faire quelque chose que vous ne pouvez pas être sûr de l'identité de l'autre partie.
Nous avons ajouté une classe qui hérite de IHttpModule, vérifie l'en-tête d'Autorisation, et crée un GenericPrincipal avec un GenericIdentity (similaire à ce qui est décrit ici). Il gère le 401/WWW-Authenticate poignée de main. Elle permet au client d'envoyer un nom d'utilisateur/mot de passe et nous permet de valider l'utilisateur à l'encontre de notre base de données. Nous n'avons pas d'échanger une clé secrète. Depuis qu'il est enveloppé dans du SSL, nous obtenons la connexion sécurisée et personnalisée Autorisation nous voulions. Cette approche est appropriée pour une API RESTful?
Oui, c'est une très bonne option est utilisée dans beaucoup d'endroits. Vous êtes encore en l'échange d'une clé secrète pourtant, il est appelé le mot de passe dans ce cas 🙂
L'a obtenu. Merci pour votre aide.
OriginalL'auteur Maurice
Mise en œuvre de l'algorithme HMAC nous pouvons trouver à
https://github.com/cuongle/WebAPI.Hmac
OriginalL'auteur Venkat