En utilisant OAuth pour le serveur-à-serveur d'authentification?
Je suis actuellement en train de travailler pour préciser mon nouveau partenaire/API publique, qui sera axée sur les ressources du service web RESTful. La pièce manquante du puzzle pour le moment est d'authentification/autorisation.
Les exigences sont:
- D'abord, il doit travailler pour un serveur-à-serveur en environnement, comme par exemple un serveur d'application doit être capable d'identifier, de sorte que nous savons qui est l'appel de l'API.
- À l'avenir, nous aimerions permettre à usurper l'identité de l'utilisateur de comptes, ainsi que le serveur étant identifiés, il aurait un jeton qui représente un compte d'utilisateur pour une période de temps limitée.
OAuth semble être idéal pour (2) avec le flux de travail de l'obtention d'un jeton, redirigé vers le site web où l'utilisateur saisit ses informations d'identification pour l'autoriser, et puis en utilisant le jeton qui identifie/authentifie l'application et l'utilisateur.
Cependant, de ce que j'ai lu, je ne sais pas si il est adapté pour (1) - c'est à dire est-il possible que ce Protocole peut être utilisé juste pour identifier l'appel de l'application sans avoir un valide spécifiques à l'utilisateur de jeton et donc n'ayant pas besoin d'être redirigé vers une page web pour eux d'entrer leurs informations d'identification?
Vous devez vous connecter pour publier un commentaire.
Oui, la durée de vie du jeton peut être configuré pour expirer jusqu'à ce que vous dites. Donc, vous devez (manuellement) complète l'authentification et l'autorisation, et économiser de l'autorisés jeton pour une utilisation ultérieure.
(Vous pouvez utiliser tout client de test pour vous aider à remplir que la partie manuelle, ou pendant que vous êtes à la mise en œuvre du serveur de vous-même: utiliser une à deux pattes OAuth.)
Il y a en fait deux OAuth cahier des charges, les 3 pattes de la version et de la 2 pattes version. Le 3 pattes version est celle qui obtient le plus d'attention.
Les 2 pattes version est exactement ce que vous voulez d'abord, il permet à une application d'accorder l'accès à un autre via une clé secrète partagée (très similaire à Amazon Web Service modèle, vous pouvez utiliser le HMAC-SHA1 signature de la méthode) ou par l'intermédiaire d'une clé publique/clé privée du système (utilisation de la signature de la méthode: RSA-SHA1). La mauvaise nouvelle, c'est qu'il n'est pas aussi bien pris en charge mais, comme le 3-pattes de version, de sorte que vous pourriez avoir à faire un peu plus de travail que vous pourriez avoir à droite maintenant.
Fondamentalement, 2 pattes OAuth juste spécifie un moyen de "signe" (calculer un hash sur) plusieurs domaines qui comprennent la date actuelle, un nombre aléatoire appelé "nonce", et les paramètres de votre demande. De ce fait, il très dur à usurper l'identité de demandes à votre service web.
OAuth est lentement mais sûrement en train de devenir une norme acceptée pour ce genre de chose, vous serez mieux dans le long terme, si vous l'embrassez parce que les gens peuvent tirer profit des différentes bibliothèques disponibles pour le faire.
Les deux 2 pattes et 3 pattes de travailler simultanément est un peu difficile en ce moment, mais il est possible (Google a aujourd'hui).
http://code.google.com/apis/accounts/docs/OAuth.html
Greg:
J'ai travaillé sur une extension de la OAuth de base qui, je pense, peut-réponse dont vous avez besoin. Nous voulions écrire des applications à l'encontre de notre propre API, mais nous avons senti qu'il n'a pas beaucoup de sens pour ne pas permettre à nos propres applications (Comme le fournisseur de service) pour collecter des informations d'identification directement auprès de l'utilisateur /consommateur de l'application puisque nous serait déjà considéré comme une partie de confiance en nous-mêmes.
L'extension permet aux 1er, 2e, et bien sûr, 3e partie (traditionnel OAuth), tout en utilisant la sécurité de jetons et de secrets, et la signature, etc... que le Protocole prévoit.
Notre documentation de la version bêta sur l'extension peut être trouvé ici.
Si c'est seulement sur serveur-à-serveur de communication, je voudrais envisager l'utilisation d'autorisation basé sur l'API - clés comme peu.ly ou FriendFeed.