Ruby JWT - izudon/izudon.github.io GitHub Wiki

結論

  • Ruby で JWT の検証を行う場合、概ね以下 2つ の gem を使うことになる。
    • jwt
      • JWT の署名を検証できるプログラム。
      • 鍵は OpenSSL::PKey 形式で与えなくてはならない。
    • json-jwt
      • OpenID Connect で通常与えられている JWKS 形式の鍵を、
        OpenSSL::Pkey::RSA のオブジェクトに変換できるプログラム。
      • 複数ある鍵から kid をもとに拾い出すことも簡単にできる。
  • サンプルプログラムは以下の通り。
    require 'jwt'
    require 'json/jwt'
    require 'net/http'
    require 'uri'
    
    # JWKS URL
    jwks_url = 'https://your-auth-server.com/.well-known/jwks.json'
    
    # Fetch JWKS
    uri = URI.parse(jwks_url)
    response = Net::HTTP.get(uri)
    jwks = JSON::JWK::Set.new(JSON.parse(response))
    
    # JWT token
    jwt_token = 'your_jwt_token_here'
    
    # Verify and decode JWT
    begin
      decoded_token = JWT.decode(jwt_token, nil, true,
                                 algorithms: ['RS256'],
                                 jwks: ->(header) { jwks[header['kid']] })
    
      puts "Decoded token: #{decoded_token}"
    rescue JWT::DecodeError => e
      puts "JWT verification failed: #{e.message}"
    end