Valider les jetons JWT dans Ruby

Il s'agit d'un mémo lorsque le jeton Web d'AWS Cognito a été vérifié.

[Vérification du jeton Web JSON \ -Amazon Cognito](https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt. html)

Cognito vous permet de télécharger un ensemble JWK pour vérification pour chaque groupe d'utilisateurs

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json

Gemme à utiliser

jwt jwt/ruby-jwt: A ruby implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.

Utilisé pour décoder les jetons JWT réguliers

json-jwt

nov/json-jwt: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and JSON Web Key) in Ruby

Utilisé pour créer une clé publique à partir d'une clé Web JSON publique (JWK)

la mise en oeuvre

#Télécharger l'ensemble JWK
uri = "https://cognito-idp.ap-northeast-1.amazonaws.com/example/.well-known/jwks.json"
response = Net::HTTP.get_response(URI.parse(uri))
jwks = JSON.parse(response.body)

#Décoder JWT sans vérification
token = JWT.decode(jwt, nil, false)

#Obtenez le match enfant de l'ensemble JWK
jwk = jwks["keys"].find { |obj| obj["kid"] == token[1]["kid"] }

#Créer une clé publique
public_key = JSON::JWK.new(jwk).to_key

#Une exception est lorsque la vérification du décodage est invalide à l'aide d'une clé publique.
JSON::JWT.decode(jwt, public_key)

Si vous le trouvez utile, veuillez LGTM

Recommended Posts

Valider les jetons JWT dans Ruby
Lourd en rubis! ??
Triangle de sortie en Ruby
Types de variables dans ruby
Popcount rapide en Ruby
ABC177-Résoudre E avec Ruby
Écrire l'héritage de classe dans Ruby
Mettre à jour Ruby dans l'environnement Unicorn
Entiers qui sont unifiés en entiers dans Ruby 2.4
[Ruby] Gestion des exceptions dans les fonctions
Utilisez des variables ruby en javascript.
Multiplication dans un tableau Ruby
À propos des expressions régulières dans Ruby
NCk mod p dans Ruby
Comment itérer indéfiniment en Ruby
Essayez d'implémenter Yuma dans Ruby
Obtenez un affichage délimité à 3 chiffres en Ruby
Encodage lors de l'accès à Windows + Ruby
Ruby on Rails compatible japonais-anglais i18n
Comment installer Bootstrap dans Ruby
Implémenter le client gRPC dans Ruby
Ecrire des clés et des valeurs dans Ruby
[Super Introduction] À propos des symboles dans Ruby
Hanachan en Ruby (manipulation non destructive de tableaux)
J'ai essayé d'utiliser JWT en Java
Informations sur la version openssl dans ruby OPENSSL_VERSION
Méthodes Ruby souvent utilisées dans Rails
Segfo Ruby en 2 lignes