web-dev-qa-db-fra.com

OAuth v2 communication entre l'authentification et le serveur de ressources

J'ai des problèmes pour comprendre comment OAUTH-v2 fonctionne.

spécification OAuth version 2 se lit comme suit:

  1. Accès aux ressources protégées

    Le client accède aux ressources protégées en présentant l'accès
    jeton sur le serveur de ressources. Le serveur de ressources DOIT valider le
    jeton d'accès et assurez-vous qu'il n'a pas expiré et que sa portée couvre
    la ressource demandée. Les méthodes utilisées par le serveur de ressources pour
    valider le jeton d'accès (ainsi que toutes les réponses d'erreur) sont au-delà de la portée de cette spécification , mais généralement impliquent une interaction ou une coordination entre le serveur de ressources et l'autorisation
    serveur
    .

Comment cette interaction entre le serveur de ressources et le serveur d'autorisation fonctionne-t-elle dans la pratique?

  • Comment le serveur de ressources détermine-t-il qu'un jeton d'accès qu'il a reçu est valide?
  • Comment le serveur de ressources extrait-il la portée autorisée du jeton pour voir si l'accès doit être accordé à une ressource particulière? La portée est-elle codée dans le jeton d'accès ou le serveur de ressources doit-il d'abord contacter le serveur d'autorisation?
  • Comment la confiance entre le serveur de ressources et le serveur d'autorisation est-elle établie?

Les attributs de jeton d'accès et les méthodes utilisées pour accéder aux ressources protégées sont au-delà de la portée de cette spécification et sont définis par des spécifications complémentaires.

Quelqu'un peut-il donner des exemples d'attributs de jeton?

79
nisc

La raison pour laquelle cela est hors de portée de la spécification est le large éventail de façons de réaliser cette connexion entre les deux entités. La question principale est la complexité de votre déploiement.

Par exemple, avez-vous un serveur gérant l'authentification et l'accès, et un ensemble de services discrets chacun avec ses propres serveurs servant les appels d'API? Ou, avez-vous une seule boîte avec un serveur Web qui gère à la fois l'authentification/autorisation et les appels API?

Dans le cas d'une seule boîte, peu de choses sont nécessaires car l'entité émettant des jetons est la même que celle qui les valide. Vous pouvez implémenter des jetons pour utiliser une clé de table de base de données et rechercher l'enregistrement dans la base de données (ou le cache de mémoire) à chaque demande, ou vous pouvez coder la portée, l'ID utilisateur et d'autres informations directement dans le jeton et les crypter à l'aide d'une symétrie ou d'une asymétrie algorithme.

Les choses deviennent un peu plus complexes lorsqu'il s'agit d'un environnement distribué, mais pas beaucoup. Vous émettez toujours des jetons sur le serveur d'autorisation, mais le serveur de ressources a besoin d'un moyen de les valider. Il peut le faire en mettant une API interne à la disposition du serveur de ressources pour demander au serveur d'autorisation de "résoudre" le jeton (qui peut être rapide dans un environnement local), ou les deux peuvent établir une paire de clés publique/privée ou un secret symétrique et l'utiliser pour crypter tout ce dont le serveur de ressources a besoin dans le jeton.

Les jetons autonomes sont plus longs mais offrent de bien meilleures performances par demande. Cependant, ils ont un prix - vous ne pouvez pas vraiment les révoquer tant qu'ils sont encore valides (non expirés). Pour cette raison, les jetons autonomes devraient être de très courte durée (tout ce qui est acceptable pour vous de laisser l'accès ouvert après sa révocation - par exemple, de nombreux sites utilisent une heure), avec un jeton d'actualisation valable pendant un an ou plus pour obtenir de nouveaux jetons.

78
Eran Hammer