Accueil > OpenID Connect OAuth Server par DnC > Développer > Un jeton d’identification peut être utilisé pour ...

Un jeton d’identification peut être utilisé pour ...

Dans la litérature sur OpenID Connect, le point de vue est souvent limité à l’identification centralisée (SSO ou single sign-on).
Un jeton d’identification est la carte d’identité de l’utilisateur final et le passeport de l’application cliente : il peut être utilisé à d’autres fins que la connexion de base.

Le jeton au format JWT présente les avantages suivants :
- C’est une spécification connue, largement adopté, et des bibliothèques client disponibles dans de nombreux langages (voyez Adaptation des applications).
- Il facilite la signature et la vérification à l’aide de bibliothèques cryptographiques validées.
- Puisqu’il peut être décodé au format JSON, cela permet d’inclure des métadonnées et des informations sur le jeton, ainsi que des données complémentaires pour l’application à laquelle il est adressé.

Tant que le serveur d’autorisations et le serveur de ressources s’accordent sur la signification du jeton, le contenu n’a aucune importance. Ce qui signifie que soit on colle au standard OpenID Connect, et alors le serveur de ressource est limité à UserInfo, soit on est dans un espace propriétaire (corporate realm) où l’on fait ce que l’on veut.

On peut citer les applications suivantes :

Passage d’identité à des tiers - Le jeton ID peut être transmis à d’autres composants d’application ou à des services d’arrière-plan lorsque la connaissance de l’identité de l’utilisateur (end-user) est requise, par exemple pour identifier les enregistrements d’un historique.
Il est également possible à une application de passer le jeton pour obtenir l’accès à une ressource protégée, à charge pour celle-ci de le valider en mentionnant l’IP de l’appelant.
Il est possible de moduler la réponse de la ressource en fonction des privilèges de l’utilisateur en adaptant les scopes transmis à cet usage. Ceci est largement développé dans cet article : Définition des scopes et généralités sur leur utilisation par les applications et dans les articles connexes.

Sessions sans état - Le jeton d’identification peut être implémenté dans un cookie de navigateur. Cela supprime la nécessité de stocker des sessions côté serveur (en mémoire ou sur disque), ce qui peut être un fardeau pour la gestion et la montée en échelle. La session est vérifiée en validant le jeton d’identification. Lorsque le jeton atteint sa limite de validité (exp), l’application peut simplement en demander un nouveau à l’OP via une ré-authentification silencieuse prompt = none.
Cette utilisation du jeton est souvent associée à la gestion de session des applications à page unique (Single Page Application, SPA) [1].

Voici un exemple qui montre comment utiliser le jeton pour simuler une session en chaînant les pages avec l’id de l’utilisateur final (user_id) :

PHP

  1. ...
  2.  
  3. // Tenter de récupérer l'user_id depuis le JWT du cookie
  4.    
  5. $GLOBALS['user_id'] = null;
  6. $prompt = 'login';
  7.  
  8. $decoded_jwt = unserialize($_COOKIE['decoded_jwt']);
  9.    
  10.  if ( is_array($decoded_jwt)) {
  11.  
  12.         if ( $decoded_jwt['exp'] > time() ) {    
  13.  
  14.             // Le JWT du cookie est valide et nous donne l'user_id
  15.             $GLOBALS['user_id'] = $decoded_jwt['sub'];        
  16.  
  17.         } else {
  18.             // Demander un nouveau jeton sans réauthentification (prompt=none)
  19.             $prompt = 'none';
  20.         }      
  21.     }
  22.  
  23. if ( is_null($GLOBALS['user_id']) ) {  
  24.     // sinon, il faut demander un jeton avec authentification de l'utilisateur
  25. ...

Télécharger

DnC a développé des applications de ce type. Par exemple, photos.dnc.global est une application sans base de données, dont les sessions sont fondées sur le JWT en cookie. On comprend l’intérêt pour la montée en échelle : une telle application peut être répartie sur de nombreux serveurs sans que le développeur ait à se soucier de réplication des données.

Echange de jetons - Le jeton ID peut être échangé contre un jeton d’accès au point de terminaison Token d’un serveur d’autorisations OAuth 2.0 ( cf. Draft IETF : Token Exchange ). Il existe des scénarios réels où un document d’identité est requis pour obtenir l’accès, par exemple lorsque vous vous enregistrez dans un hôtel pour obtenir la clé de votre chambre. L’échange de jetons a des utilisations dans les applications distribuées et d’entreprise.

Notes

[1Pourquoi se limiter à la page unique ? Remarquons que cette technique est particulièrement avantageuse pour gérer des applications multi-pages et/ou un ensemble d’applications à page unique.