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