Comment 2 pattes oauth travail dans le protocole OAuth 2.0?
Dans OAuth 1.0, 2 pattes est assez facile: il suffit d'envoyer la demande comme d'habitude et d'omettre le access_token
en-tête.
Choses semble avoir changé dans le protocole OAuth 2.0 (de façon drastique, comme je l'ai découvert aujourd'hui :)). Dans le protocole OAuth 2.0, la demande n'a plus les en-têtes tels que le nonce, de la consommation de clé, timestamp etc. C'est juste remplacé par:
Authorization: OAuth ya29.4fgasdfafasdfdsaf3waffghfhfgh
Je comprends comment 3 pattes autorisations de travaux dans le protocole OAuth 2.0 et le flux d'application. Mais comment fait 2 jambes en 2.0? Est-il possible de concevoir une API qui peuvent prendre en charge les 2 pattes et 3 pattes le protocole OAuth 2.0?
J'ai été la recherche d'informations à ce sujet, mais j'ai trouvé beaucoup de choses sur les 2 pattes de 1.0 et presque rien à la version 2.0.
- d'accord avec vous, il y a suffisamment d'informations pour 3 pattes oauth2.0, ou 2 pattes oauth 1.0, mais presque rien pour les 2 pattes oauth 2.0.
Vous devez vous connecter pour publier un commentaire.
Après beaucoup de recherches, j'ai découvert que
client_credentials
type de subvention est à ce scénario. Une fois que vous frappez ce terme dans google, vous pouvez trouver des charges de très des ressources utiles.C'est le flux normal pour 3 pattes OAuth 2.0 (nous voulons que l'utilisateur connexion):
Supposons que nous disposons de la suite de points de terminaison dans notre app pour l'authentification:
Normalement (pour le code d'autorisation de la subvention), nous demandons à l'utilisateur de
/oauth/auth?state=blah&client_id=myid&redirecturl=mysite.com/blah
Puis, après authentification, l'utilisateur est redirigé vers
mysite.com/blah?code=somecode
Nous obtenons alors
somecode
et de l'échanger pour un jeton à l'aide de/oauth/token?code=somecode&client_id=myid&client_secret=mysecret
On peut ensuite utiliser le jeton pour faire des appels.
C'est le flux de l'application pour
client_credentials
à mettre en œuvre 2 pattes OAuth 2.0, ce qui est nettement plus simple:Nous il suffit de POSTER à
/oauth/token
avec le formulaire ci-dessous des données:Noter que le champ est facultatif. Le point de terminaison ensuite directement retourne un jeton d'accès pour nous de l'utiliser (pas de jeton d'actualisation est fourni). Depuis pas de jeton d'actualisation est fourni, lors de l'expiration de ce jeton, vous aurez besoin de s'authentifier à nouveau et en demander une nouvelle.
Cela conduit à la mise en garde suivante:
Une autre solution est d'utiliser JWT (JSON web jetons) comme le google API OAuth. C'est un processus très compliqué, mais il existe de nombreuses bibliothèques pour la réalisation de vos JWT. Vous ensuite de poster le formulaire ci-dessous des données (url encodé bien sûr):
Ce qui est affiché à
/oauth/token
pour obtenir votre jeton.Comme pour la question de si vous pouvez créer une API qui prend en charge 2 pattes et 3 pattes le protocole OAuth 2.0, Oui, il est possible.
Puis
/auth
point de terminaison est utilisé uniquement lorsque les utilisateurs doivent s'authentifier sur le service.Dans le
/token
point de terminaison, il suffit de vérifier la valeur degrant_type
dans les paramètres GET poururn:ietf:params:oauth:grant-type:jwt-bearer
si l'aide de JWT ouclient_credentials
pour client_credentials.Noter que lors de la génération de la client_id et client_secret donner à l'utilisateur, si vous êtes à la prise en charge de plusieurs
grant_types
, assurez-vous que vous avez une colonne de base de données pour stocker ce type de subvention saisissez l'id et le secret a été généré pour. Si nécessaire de disposer de plusieurs types de subventions par l'utilisateur, générer des informations d'identification pour chaque type de subvention.Vous pouvez aussi consulter Google de mise en œuvre de 2 pattes OAuth2 (je crois que cette documentation a été publié que récemment).
La Google Drive SDK délégation docs devrait également aider à la compréhension de Google 2 pattes OAuth2 mise en œuvre.