Überprüfen Sie JWT-Token in Ruby

Dies ist ein Memo, als das Web-Token von AWS Cognito überprüft wurde.

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

Mit Cognito können Sie ein JWK-Set zur Überprüfung für jeden Benutzerpool herunterladen

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

Edelstein zu verwenden

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

Wird zum Dekodieren von regulären JWT-Token verwendet

json-jwt

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

Wird verwendet, um einen öffentlichen Schlüssel aus einem öffentlichen JSON-Webschlüssel (JWK) zu erstellen.

Implementierung

#Laden Sie das JWK-Set herunter
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)

#Dekodieren Sie JWT ohne Überprüfung
token = JWT.decode(jwt, nil, false)

#Holen Sie sich das Kinderspiel aus dem JWK-Set
jwk = jwks["keys"].find { |obj| obj["kid"] == token[1]["kid"] }

#Erstellen Sie einen öffentlichen Schlüssel
public_key = JSON::JWK.new(jwk).to_key

#Eine Ausnahme ist, wenn die Dekodierungsüberprüfung mit einem öffentlichen Schlüssel ungültig ist.
JSON::JWT.decode(jwt, public_key)

Wenn Sie es hilfreich finden, wenden Sie sich bitte an LGTM

Recommended Posts

Überprüfen Sie JWT-Token in Ruby
Schwer in Rubin! ??
Ausgabedreieck in Ruby
Arten von Variablen in Ruby
Schneller Popcount in Ruby
ABC177 - E in Ruby lösen
Schreiben Sie die Klassenvererbung in Ruby
Aktualisieren Sie Ruby in der Unicorn-Umgebung
Ganzzahlen, die in Ruby 2.4 zu Ganzzahlen zusammengefasst sind
[Ruby] Ausnahmebehandlung in Funktionen
Verwenden Sie Ruby-Variablen in Javascript.
Multiplikation innerhalb eines Ruby-Arrays
Über reguläre Ausdrücke in Ruby
NCk mod p in Ruby
Wie man in Ruby auf unbestimmte Zeit iteriert
Versuchen Sie, Yuma in Ruby zu implementieren
Erzielen Sie eine dreistellig begrenzte Anzeige in Ruby
Codierung unter Windows + Ruby
Ruby on Rails Japanisch-Englisch kompatibler i18n
So installieren Sie Bootstrap in Ruby
Implementieren Sie den gRPC-Client in Ruby
Schreiben Sie Schlüssel und Werte in Ruby
[Super Einführung] Über Symbole in Ruby
Hanachan in Ruby (zerstörungsfreie Array-Manipulation)
Ich habe versucht, JWT in Java zu verwenden
OpenSL-Versionsinformationen in Ruby OPENSSL_VERSION
Ruby-Methoden, die häufig in Rails verwendet werden
Segfo Ruby in 2 Zeilen