Gestion des JWT
Jetons Web JSON (JWT) Les JWTs sont un moyen compact et sûr de représenter les demandes à transférer entre deux parties. Vonage utilise les JWT pour l'authentification auprès d'une variété d'API sur le front-end et le back-end ; pour une liste complète des API qui utilisent les JWT, voir le tableau dans le site Web de Vonage. Authentification guide.
Générer des JWT
Le CLI de Vonage contient un vonage jwt create qui peut être utilisée pour générer des JWT. Pour utiliser cette commande, vous devez disposer à la fois de votre app-id et private-key. La clé privée est générée à partir du tableau de bord de l'application, ou en exécutant la commande vonage apps create. Vous trouverez plus d'informations sur cette commande dans Gestion des applications.
Lors de la création du JWT, vous pouvez soit indiquer le chemin d'accès à votre fichier de clé privée, soit enregistrer ces informations pour l'interface de programmation en exécutant la commande suivante vonage auth set (voir ici pour plus d'informations). Le contenu de la clé privée sera ensuite enregistré dans le fichier .vonagerc ou $HOME/.vonage/config.json.
Vonage Credentials :
| Drapeau | Description | Type |
|---|---|---|
--app-id | L'identifiant de l'application à utiliser. Il se trouve dans la section "Applications" du tableau de bord ou est généré à l'aide de la commande vonage apps. | Chaîne |
--private-key | Le chemin ou le contenu de la clé privée. La clé privée n'est accessible que lors de la création de l'application ou lorsque vous régénérez les clés dans le tableau de bord. | Chaîne |
**JWT Options:**
| Drapeau | Description | Type |
|---|---|---|
--exp | Date d'expiration du jeton | Numbers |
--ttl | Le temps de vivre en secondes | Numbers |
--sub | Le sujet du jeton | Chaîne |
--acl | La liste de contrôle d'accès pour le jeton | Chaîne |
# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key
# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
REM A command with parameters
vonage jwt create ^
--app-id='00000000-0000-0000-0000-000000000000' ^
--private-key=./private.key
REM Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MzYyODE5NDYsImp0aSI6IjBmZjcwZDNmLTAzN2EtNGY4MC04ODZjLWI3MmM3MmQyMWNmMiIsImlhdCI6MTczNjI4MTA0NiwiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.gA7jClpqaZ2OoS0iri-zGCbda4jO7C0M8mka0EnSyjlds1EeY8fNoBEx3FTXHfkkzzrj0TskrWc_dcs1wuM8Kx55c5rLQ7taVpDAYopKSc_CeeOaad8S6aWnRkTUTNeduO4aIn-0CbyRTluBYsH1RBqYBQvobuQIDEwbFw8xBgx0UfREMMN6DAWknR57eiVXN9x_oD6CGQJ1yV3025nGboeMsP9YgX4Nwc-rE2r8c1ZGwCLO81x8i19Qil3Nwu5q1nzouyavQjIw00B_TZkushnI1ufdi_GNqk-h5q2HvGkg7Pj9bVkZHFdVTO8im03JYNyJmcV83vnpjOLuCFRzxQ
Liste de contrôle d'accès (ACL)
Si vous générez un JWT pour l'utiliser avec les SDK de Vonage Client, vous pouvez avoir besoin de spécifier une ACL, qui est utilisée pour spécifier les permissions pour les utilisateurs.
Dans l'interface de gestion, une liste de contrôle d'accès est définie à l'aide de la commande --acl drapeau. Dans l'exemple ci-dessous, vous pouvez voir le drapeau path qui contient une liste de différents points d'accès correspondant aux différentes autorisations accordées à l'utilisateur. La liste complète de ces points d'accès se trouve dans la section Authentification guide.
# A command with parameters
vonage jwt create `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key `
--sub='Alice' `
--acl='{\"paths\":{\"\/*\/users\/**\":{},\"\/*\/conversations\/**\":{},\"\/*\/sessions\/**\":{},\"\/*\/devices\/**\":{},\"\/*\/push\/**\":{},\"\/*\/knocking\/**\":{},\"\/*\/legs\/**\":{}}}'
# Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2wiOnsicGF0aHMiOnsiLyovcnRjLyoqIjp7fSwiLyovdXNlcnMvKioiOnt9LCIvKi9jb252ZXJzYXRpb25zLyoqIjp7fSwiLyovc2Vzc2lvbnMvKioiOnt9LCIvKi9kZXZpY2VzLyoqIjp7fSwiLyovcHVzaC8qKiI6e30sIi8qL2tub2NraW5nLyoqIjp7fSwiLyovbGVncy8qKiI6e319fSwiZXhwIjoxNzQxMTgyMzA3LCJzdWIiOiJBbGljZSIsImp0aSI6Ijg1MTViNzk2LTA1YjktNGFkMS04MTRkLTE1NWZjZTQzZWM1YiIsImlhdCI6MTc0MTE4MTQwNywiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.BscMdDXZ1-nuLtKyPJvw9tE8E8ZjJvTPJPMT9y0TjPz4Q7qqNaqxcjglc5QPtYEjh2YpZH6btSKbUF4XTClI026Hl5_QOBlnayYo7jXwhba16fa5PeyzSf30QFGFrHbANwrQJFVCjd329SZUpwK4GxgB1gf230NhbfmkhegKezqicru2WTGCKm8kQncYliFwIEYUlcRAb2c8xcaVrn_6QNNahyeJRwGFfWpIkX0Oe-S4RDlPjoq47_gYWac9MmaetB4Dd3Yp531AuniGV5JiIShkaEwuY4Zyov4Hcmajm4Lm_UFY119la7vzHis0P7cT9pPUDe5cyPj7eT8-VhitfQ
REM A command with parameters
vonage jwt create ^
--app-id='00000000-0000-0000-0000-000000000000' ^
--private-key=./private.key ^
--sub='Alice' ^
--acl="{\"paths\":{\"\/*\/users\/**\":{},\"\/*\/conversations\/**\":{},\"\/*\/sessions\/**\":{},\"\/*\/devices\/**\":{},\"\/*\/push\/**\":{},\"\/*\/knocking\/**\":{},\"\/*\/legs\/**\":{}}}"
REM Will produce a token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2wiOnsicGF0aHMiOnsiLyovcnRjLyoqIjp7fSwiLyovdXNlcnMvKioiOnt9LCIvKi9jb252ZXJzYXRpb25zLyoqIjp7fSwiLyovc2Vzc2lvbnMvKioiOnt9LCIvKi9kZXZpY2VzLyoqIjp7fSwiLyovcHVzaC8qKiI6e30sIi8qL2tub2NraW5nLyoqIjp7fSwiLyovbGVncy8qKiI6e319fSwiZXhwIjoxNzQxMTgyMzA3LCJzdWIiOiJBbGljZSIsImp0aSI6Ijg1MTViNzk2LTA1YjktNGFkMS04MTRkLTE1NWZjZTQzZWM1YiIsImlhdCI6MTc0MTE4MTQwNywiYXBwbGljYXRpb25faWQiOiIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAifQ.BscMdDXZ1-nuLtKyPJvw9tE8E8ZjJvTPJPMT9y0TjPz4Q7qqNaqxcjglc5QPtYEjh2YpZH6btSKbUF4XTClI026Hl5_QOBlnayYo7jXwhba16fa5PeyzSf30QFGFrHbANwrQJFVCjd329SZUpwK4GxgB1gf230NhbfmkhegKezqicru2WTGCKm8kQncYliFwIEYUlcRAb2c8xcaVrn_6QNNahyeJRwGFfWpIkX0Oe-S4RDlPjoq47_gYWac9MmaetB4Dd3Yp531AuniGV5JiIShkaEwuY4Zyov4Hcmajm4Lm_UFY119la7vzHis0P7cT9pPUDe5cyPj7eT8-VhitfQ
Validation des JWT
Les vonage jwt validate <token> peut être utilisée pour vérifier que le jeton est correctement signé dans votre application, mais elle peut également vérifier les autres revendications. Cela peut s'avérer utile si vous rencontrez des problèmes d'authentification lors d'appels à l'API.
Par défaut, la clé privée et l'identifiant de l'application figurant dans la configuration seront utilisés ; vous pouvez vérifier ces valeurs à l'aide de la fonction vonage auth show.
Si vous souhaitez valider un jeton avec une clé privée ou un identifiant d'application différent,
vous pouvez utiliser l'option --private-key et --app-id pour les écraser.
Vonage Credentials :
| Drapeau | Description | Type |
|---|---|---|
--app-id | L'identifiant de l'application à utiliser. Il se trouve dans la section "Applications" du tableau de bord ou est généré à l'aide de la commande vonage apps. | Chaîne |
--private-key | Le chemin ou le contenu de la clé privée. La clé privée n'est accessible que lors de la création de l'application ou lorsque vous régénérez les clés dans le tableau de bord. | Chaîne |
**JWT Options:**
| Drapeau | Description | Type |
|---|---|---|
--sub | Le sujet du jeton | Chaîne |
--acl | La liste de contrôle d'accès pour le jeton | Chaîne |
vonage jwt create <JWT Token> `
--app-id='00000000-0000-0000-0000-000000000000' `
--private-key=./private.key `
--sub='Alice' `
--acl='{"paths":{"/*/rtc/**":{},"/*/users/**":{},"/*/conversations/**":{},"/*/sessions/**":{},"/*/devices/**":{},"/*/image/**":{},"/*/media/**":{},"/*/applications/**":{},"/*/push/**":{},"/*/knocking/**":{},"/*/legs/**":{}}}' `
--exp=872827200
✅ Token was signed with the correct private key
✅ Token has not expired
✅ Application Id [00000000-0000-0000-0000-000000000000] matches [00000000-0000-0000-0000-000000000000]
✅ Subject [Alice] matches [Alice]
✅ ACL matches
✅ [ANY] /*/rtc/**
✅ [ANY] /*/users/**
✅ [ANY] /*/conversations/**
✅ [ANY] /*/sessions/**
✅ [ANY] /*/devices/**
✅ [ANY] /*/image/**
✅ [ANY] /*/media/**
✅ [ANY] /*/applications/**
✅ [ANY] /*/push/**
✅ [ANY] /*/knocking/**
✅ [ANY] /*/legs/**
✅ All checks complete! Token is valid
vonage jwt create <JWT Token> ^
--app-id='00000000-0000-0000-0000-000000000000' ^
--private-key=./private.key ^
--sub='Alice' ^
--acl='{"paths":{"/*/rtc/**":{},"/*/users/**":{},"/*/conversations/**":{},"/*/sessions/**":{},"/*/devices/**":{},"/*/image/**":{},"/*/media/**":{},"/*/applications/**":{},"/*/push/**":{},"/*/knocking/**":{},"/*/legs/**":{}}}' ^
--exp=872827200
✅ Token was signed with the correct private key
✅ Token has not expired
✅ Application Id [00000000-0000-0000-0000-000000000000] matches [00000000-0000-0000-0000-000000000000]
✅ Subject [Alice] matches [Alice]
✅ ACL matches
✅ [ANY] /*/rtc/**
✅ [ANY] /*/users/**
✅ [ANY] /*/conversations/**
✅ [ANY] /*/sessions/**
✅ [ANY] /*/devices/**
✅ [ANY] /*/image/**
✅ [ANY] /*/media/**
✅ [ANY] /*/applications/**
✅ [ANY] /*/push/**
✅ [ANY] /*/knocking/**
✅ [ANY] /*/legs/**
✅ All checks complete! Token is valid