module JWT
JSON Web Token implementation
Should be up to date with the latest spec: tools.ietf.org/html/rfc7519
JWT::Decode module
JWT::Encode module
JWT::Signature module
Moments version builder module
Public Class Methods
gem_version()
click to toggle source
# File lib/jwt/version.rb, line 4 def self.gem_version Gem::Version.new VERSION::STRING end
Public Instance Methods
allowed_algorithms(options)
click to toggle source
# File lib/jwt.rb, line 55 def allowed_algorithms(options) if options.key?(:algorithm) [options[:algorithm]] else options[:algorithms] || [] end end
decode(jwt, key = nil, verify = true, custom_options = {}, &keyfinder)
click to toggle source
# File lib/jwt.rb, line 24 def decode(jwt, key = nil, verify = true, custom_options = {}, &keyfinder) raise(JWT::DecodeError, 'Nil JSON web token') unless jwt merged_options = DEFAULT_OPTIONS.merge(custom_options) decoder = Decode.new jwt, verify header, payload, signature, signing_input = decoder.decode_segments decode_verify_signature(key, header, payload, signature, signing_input, merged_options, &keyfinder) if verify Verify.verify_claims(payload, merged_options) if verify raise(JWT::DecodeError, 'Not enough or too many segments') unless header && payload [payload, header] end
decode_verify_signature(key, header, payload, signature, signing_input, options, &keyfinder)
click to toggle source
# File lib/jwt.rb, line 40 def decode_verify_signature(key, header, payload, signature, signing_input, options, &keyfinder) algo, key = signature_algorithm_and_key(header, payload, key, &keyfinder) raise(JWT::IncorrectAlgorithm, 'An algorithm must be specified') if allowed_algorithms(options).empty? raise(JWT::IncorrectAlgorithm, 'Expected a different algorithm') unless allowed_algorithms(options).include?(algo) Signature.verify(algo, key, signing_input, signature) end
encode(payload, key, algorithm = 'HS256', header_fields = {})
click to toggle source
# File lib/jwt.rb, line 19 def encode(payload, key, algorithm = 'HS256', header_fields = {}) encoder = Encode.new payload, key, algorithm, header_fields encoder.segments end
signature_algorithm_and_key(header, payload, key) { |header, payload| ... }
click to toggle source
# File lib/jwt.rb, line 49 def signature_algorithm_and_key(header, payload, key, &keyfinder) key = (keyfinder.arity == 2 ? yield(header, payload) : yield(header)) if keyfinder raise JWT::DecodeError, 'No verification key available' unless key [header['alg'], key] end