Module: JWT
- Includes:
- DefaultOptions
- Defined in:
- lib/jwt.rb,
lib/jwt/error.rb,
lib/jwt/decode.rb,
lib/jwt/encode.rb,
lib/jwt/verify.rb,
lib/jwt/version.rb,
lib/jwt/signature.rb,
lib/jwt/security_utils.rb,
lib/jwt/default_options.rb
Overview
Defined Under Namespace
Modules: DefaultOptions, SecurityUtils, Signature, VERSION
Classes: Decode, DecodeError, Encode, EncodeError, ExpiredSignature, ImmatureSignature, IncorrectAlgorithm, InvalidAudError, InvalidIatError, InvalidIssuerError, InvalidJtiError, InvalidPayload, InvalidSubError, VerificationError, Verify
Constant Summary
DefaultOptions::DEFAULT_OPTIONS
Class Method Summary
collapse
-
.decode(jwt, key = nil, verify = true, custom_options = {}, &keyfinder) ⇒ Object
-
.decode_verify_signature(key, header, payload, signature, signing_input, options, &keyfinder) ⇒ Object
-
.encode(payload, key, algorithm = 'HS256', header_fields = {}) ⇒ Object
-
.gem_version ⇒ Object
-
.signature_algorithm_and_key(header, payload, key, &keyfinder) ⇒ Object
Class Method Details
.decode(jwt, key = nil, verify = true, custom_options = {}, &keyfinder) ⇒ Object
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/jwt.rb', line 25
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
, payload, signature, signing_input = decoder.decode_segments
decode_verify_signature(key, , 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 && payload
[payload, ]
end
|
.decode_verify_signature(key, header, payload, signature, signing_input, options, &keyfinder) ⇒ Object
41
42
43
44
45
46
47
48
|
# File 'lib/jwt.rb', line 41
def decode_verify_signature(key, , payload, signature, signing_input, options, &keyfinder)
algo, key = signature_algorithm_and_key(, payload, key, &keyfinder)
raise(JWT::IncorrectAlgorithm, 'An algorithm must be specified') unless options[:algorithm]
raise(JWT::IncorrectAlgorithm, 'Expected a different algorithm') unless algo == options[:algorithm]
Signature.verify(algo, key, signing_input, signature)
end
|
.encode(payload, key, algorithm = 'HS256', header_fields = {}) ⇒ Object
20
21
22
23
|
# File 'lib/jwt.rb', line 20
def encode(payload, key, algorithm = 'HS256', = {})
encoder = Encode.new payload, key, algorithm,
encoder.segments
end
|
.gem_version ⇒ Object
6
7
8
|
# File 'lib/jwt/version.rb', line 6
def self.gem_version
Gem::Version.new VERSION::STRING
end
|
.signature_algorithm_and_key(header, payload, key, &keyfinder) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/jwt.rb', line 50
def signature_algorithm_and_key(, payload, key, &keyfinder)
if keyfinder
key = if keyfinder.arity == 2
yield(, payload)
else
yield()
end
raise JWT::DecodeError, 'No verification key available' unless key
end
[['alg'], key]
end
|