web:javascript:jwt
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
web:javascript:jwt [2020/07/20 15:17] – [Payload] sgariepy | web:javascript:jwt [2025/03/04 15:00] (Version actuelle) – [Clé privée] sgariepy | ||
---|---|---|---|
Ligne 76: | Ligne 76: | ||
</ | </ | ||
+ | ====== Packages npm ====== | ||
+ | ===== jsonwebtoken ===== | ||
< | < | ||
- | eyJraWQiOiJTXC8yc1lESEpQcFh2UWNsOHRiS0U1QStBRVNieHVcL2c2SmZRV1hIN0pqNjA9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIzOWQ3NjlhYS1mMWE1LTRlNDctYjZlMC1hMzAyZjgxOWJhODIiLCJhdWQiOiI3ZGlpZXBsMzBraWxmNWZoZ2sxYjJqZjdjNSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJldmVudF9pZCI6ImQxZjQxZTYxLTVmZGQtNDgxNS1hMzMzLWM1Yjg2Y2E5YzE2ZSIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNTk1MjUwNjczLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb21cL2NhLWNlbnRyYWwtMV9kWFlqa1pjN3IiLCJjb2duaXRvOnVzZXJuYW1lIjoic2dhcmllcHlAYmh2ci5jb20iLCJleHAiOjE1OTUyNTQyNzMsImlhdCI6MTU5NTI1MDY3MywiZW1haWwiOiJzZ2FyaWVweUBiaHZyLmNvbSJ9.UttCWsH9b_9ahYmYx87iyXc60BjqJTrDZQ3e4gHjOPgX97wFdawwCRmJd0ChI6J-dUVogwCWGaj3z2JPDo2XYB8L7WPxFceFkEHLOQTOSU2uk_3B9d-CRTBPjAjllV89dksJtRRmwhUIdT_uBGNpoI9T_CtMMm6yBV9zJCjPrgys1eRdsRk9BA45bd8Saf_JPqUa9lMqvT8Ka9uq0naXt0CB4m6zwMvqbBMVONdbeZ2ET3BZxt2BW9Qp6Bzg4qUe2Mliatfzd0tIyDkWlHY1lZcrJqkFLwmnxLDwtzlYek5q0fzgJwF0qxiuPwk16opuj_plOnlo7CU9-WDzNJszgg | + | npm install jsonwebtoken |
+ | npm install @types/ | ||
</ | </ | ||
+ | |||
+ | |||
+ | Import: | ||
+ | |||
+ | <code javascript> | ||
+ | import * as jwt from ' | ||
+ | // ou | ||
+ | import jwt from ' | ||
+ | </ | ||
+ | |||
+ | |||
+ | Signer: | ||
+ | |||
+ | < | ||
+ | const jwtToken = jwt.sign( | ||
+ | { userId }, | ||
+ | this.secretsConfig.jwt, | ||
+ | { | ||
+ | algorithm: ' | ||
+ | expiresIn: ' | ||
+ | } | ||
+ | ); | ||
+ | </ | ||
+ | |||
+ | Avec RS256: | ||
+ | |||
+ | < | ||
+ | const privateKey = fs.readFileSync(' | ||
+ | const token = jwt.sign({ foo: ' | ||
+ | </ | ||
+ | |||
+ | Vérifier: | ||
+ | |||
+ | < | ||
+ | const authHeader = req.header(' | ||
+ | |||
+ | const token = jwt.verify( | ||
+ | authHeader, | ||
+ | secret, | ||
+ | { | ||
+ | algorithms: [' | ||
+ | } | ||
+ | ); | ||
+ | </ | ||
+ | |||
+ | Verify asymetric : | ||
+ | |||
+ | < | ||
+ | import jwks from ' | ||
+ | |||
+ | const client = jwksClient({ | ||
+ | jwksUri: ' | ||
+ | }); | ||
+ | |||
+ | function getKey(header, | ||
+ | client.getSigningKey(header.kid, | ||
+ | var signingKey = key.publicKey || key.rsaPublicKey; | ||
+ | callback(null, | ||
+ | }); | ||
+ | } | ||
+ | |||
+ | jwt.verify(token, | ||
+ | console.log(decoded.foo) // bar | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== jwks-rsa ===== | ||
+ | |||
+ | |||
+ | Importer: | ||
+ | |||
+ | < | ||
+ | import jwks from ' | ||
+ | // ou | ||
+ | import * as jwks from ' | ||
+ | < | ||
+ | |||
+ | < | ||
+ | const jwksClient = jwksClient({ | ||
+ | cache: true, | ||
+ | jwksUri: ' | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | |||
====== JOSE ====== | ====== JOSE ====== | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
===== Clé privée ===== | ===== Clé privée ===== | ||
Ligne 103: | Ligne 198: | ||
</ | </ | ||
+ | ==== Simple secret ==== | ||
+ | |||
+ | Si on veut créer un simple secret (qu'on utilise pas JWKS), on peut exécuter: | ||
+ | |||
+ | < | ||
+ | openssl rand -hex 32 | ||
+ | </ | ||
+ | |||
+ | Ajuster la longueur du secret avec le dernier paramètre (ex: 64 versus 32). | ||
Ligne 244: | Ligne 348: | ||
} | } | ||
</ | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
web/javascript/jwt.1595251021.txt.gz · Dernière modification : 2022/02/02 00:43 (modification externe)