En lisant votre question, j'ai essayé sans succès de rechercher sur Internet comment les jetons Bearer sont chiffrés ou signés. Je suppose que les jetons de support ne sont pas hachés (peut-être partiellement, mais pas complètement) car dans ce cas, il ne sera pas possible de les décrypter et d'en récupérer les propriétés des utilisateurs.
Mais votre question semble essayer de trouver des réponses sur la fonctionnalité du jeton Bearer:
Supposons que j'implémente un fournisseur d'autorisation, puis-je fournir n'importe quel type de chaîne pour le jeton de support? Cela peut-il être une chaîne aléatoire? Doit-il être un encodage base64 de certains attributs? Doit-il être haché?
Donc, je vais essayer d'expliquer comment fonctionnent les jetons Bearer et Refresh:
Lorsque l'utilisateur demande au serveur un jeton envoyant un utilisateur et un mot de passe via SSL, le serveur renvoie deux choses: un jeton d'accès et un jeton d'actualisation .
Un jeton d'accès est un jeton porteur que vous devrez ajouter dans tous les en-têtes de demande pour être authentifié en tant qu'utilisateur concret.
Authorization: Bearer <access_token>
Un jeton d'accès est une chaîne cryptée avec toutes les propriétés utilisateur, revendications et rôles que vous souhaitez. (Vous pouvez vérifier que la taille d'un jeton augmente si vous ajoutez plus de rôles ou de revendications). Une fois que le serveur de ressources reçoit un jeton d'accès, il pourra le déchiffrer et lire ces propriétés utilisateur. De cette façon, l'utilisateur sera validé et accordé avec toute l'application.
Les jetons d'accès ont une courte expiration (c.-à-d. 30 minutes). Si les jetons d'accès avaient une longue expiration, ce serait un problème, car en théorie, il n'y a aucune possibilité de les révoquer. Imaginez donc un utilisateur avec un rôle = "Admin" qui se transforme en "Utilisateur". Si un utilisateur conserve l'ancien token avec role = "Admin", il pourra y accéder jusqu'à l'expiration du token avec les droits Admin. C'est pourquoi les jetons d'accès ont une courte expiration.
Mais, un problème vient à l'esprit. Si un jeton d'accès a une courte expiration, nous devons envoyer à chaque courte période l'utilisateur et le mot de passe. Est-ce sécurisé? Non, ça ne l'est pas. Nous devons l'éviter. C'est à ce moment que les jetons d'actualisation semblent résoudre ce problème.
Les jetons d'actualisation sont stockés dans la base de données et auront une longue expiration (exemple: 1 mois).
Un utilisateur peut obtenir un nouveau jeton d'accès (lorsqu'il expire, toutes les 30 minutes par exemple) à l'aide d'un jeton d'actualisation, que l'utilisateur avait reçu lors de la première demande de jeton. Lorsqu'un jeton d'accès expire, le client doit envoyer un jeton d'actualisation. Si ce jeton d'actualisation existe dans la base de données, le serveur retournera au client un nouveau jeton d'accès et un autre jeton d'actualisation (et remplacera l'ancien jeton d'actualisation par le nouveau).
Dans le cas où un jeton d'accès utilisateur a été compromis, le jeton d'actualisation de cet utilisateur doit être supprimé de la base de données. De cette façon, le jeton ne sera valide que jusqu'à l'expiration du jeton d'accès, car lorsque le pirate tente d'obtenir un nouveau jeton d'accès en envoyant le jeton d'actualisation, cette action sera refusée.