Selon RFC6750 -The OAuth 2.0 Authorization Framework: Bearer Token Usage, le token support est:
Un jeton de sécurité avec la propriété que toute partie en possession du jeton (un «porteur») peut utiliser le jeton de n'importe quelle manière que n'importe quelle autre partie en possession de celui-ci peut.
Pour moi, cette définition est vague et je ne trouve aucune spécification.
- 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é? - Et le fournisseur de services doit-il interroger le fournisseur d'autorisation afin de valider ce jeton?
Merci pour tout pointeur.
oauth
bearer-token
Alex Beaupré
la source
la source
Réponses:
Le jeton de support est créé pour vous par le serveur d'authentification. Lorsqu'un utilisateur authentifie votre application (client), le serveur d'authentification va alors et génère pour vous un Token. Les jetons au porteur sont le type de jeton d'accès prédominant utilisé avec OAuth 2.0. Un jeton porteur dit essentiellement "Donner l'accès au porteur de ce jeton".
Le jeton de support est normalement une sorte de valeur opaque créée par le serveur d'authentification. Ce n'est pas aléatoire; il est créé en fonction de l'utilisateur qui vous donne l'accès et du client auquel votre application a accès.
Pour accéder à une API par exemple, vous devez utiliser un jeton d'accès. Les jetons d'accès sont de courte durée (environ une heure). Vous utilisez le jeton porteur pour obtenir un nouveau jeton d'accès. Pour obtenir un jeton d'accès, vous envoyez au serveur d'authentification ce jeton de support avec votre identifiant client. De cette façon, le serveur sait que l'application utilisant le jeton de support est la même application pour laquelle le jeton de support a été créé. Exemple: je ne peux pas simplement prendre un jeton porteur créé pour votre application et l'utiliser avec mon application, cela ne fonctionnera pas car il n'a pas été généré pour moi.
Le jeton Google Refresh ressemble à ceci: 1 / mZ1edKKACtPAb7zGlwSzvs72PvhAbGmB8K1ZrGxpcNM
copié du commentaire: je ne pense pas qu'il y ait de restrictions sur les jetons de porteur que vous fournissez. La seule chose à laquelle je pense, c'est que c'est bien d'en autoriser plus d'un. Par exemple, un utilisateur peut authentifier l'application jusqu'à 30 fois et les anciens jetons de support fonctionneront toujours. oh et si l'un n'a pas été utilisé depuis, disons 6 mois, je le supprimerais de votre système. C'est votre serveur d'authentification qui devra les générer et les valider pour que le formatage soit à vous.
Mettre à jour:
Un jeton de support est défini dans l'en-tête d'autorisation de chaque requête HTTP d'action en ligne. Par exemple:
La chaîne
"AbCdEf123456"
de l'exemple ci-dessus est le jeton d'autorisation du porteur. Il s'agit d'un jeton cryptographique produit par le serveur d'authentification. Tous les jetons de support envoyés avec des actions ont le champ de problème, le champ d'audience spécifiant le domaine de l'expéditeur sous la forme d'une URL de la forme https: //. Par exemple, si l'e-mail provient de [email protected], l'audience est https://example.com .Si vous utilisez des jetons de support, vérifiez que la demande provient du serveur d'authentification et est destinée au domaine de l'expéditeur. Si le jeton ne vérifie pas, le service doit répondre à la demande avec un code de réponse HTTP 401 (non autorisé).
Les jetons au porteur font partie de la norme OAuth V2 et sont largement adoptés par de nombreuses API.
la source
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:
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.
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.
la source
Le jeton porteur est une ou plusieurs répétitions d'alphabet, de chiffre, "-", "." , "_", "~", "+", "/" suivi de 0 ou plus "=".
RFC 6750 2.1. Champ d'en-tête de demande d'autorisation (le format est ABNF (BNF augmenté))
Cela ressemble à Base64 mais selon le jeton dans l'en-tête doit-il être encodé en base64? , ce n'est pas.
Références
la source