Class: JSON::JWT
- Inherits:
-
Hash
- Object
- Hash
- JSON::JWT
- Defined in:
- lib/json/jwt.rb
Defined Under Namespace
Classes: Exception, InvalidFormat, UnexpectedAlgorighm, VerificationFailed
Instance Attribute Summary collapse
-
#header ⇒ Object
Returns the value of attribute header.
-
#signature ⇒ Object
Returns the value of attribute signature.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(claims) ⇒ JWT
constructor
A new instance of JWT.
- #sign(private_key_or_secret, algorithm = :HS256) ⇒ Object
- #to_s ⇒ Object
- #verify(signature_base_string, signature = '', public_key_or_secret = nil) ⇒ Object
Constructor Details
#initialize(claims) ⇒ JWT
Returns a new instance of JWT.
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/json/jwt.rb', line 15 def initialize(claims) @header = { :typ => :JWT, :alg => :none } [:exp, :nbf, :iat].each do |key| claims[key] = claims[key].to_i if claims[key] end replace claims end |
Instance Attribute Details
#header ⇒ Object
Returns the value of attribute header.
8 9 10 |
# File 'lib/json/jwt.rb', line 8 def header @header end |
#signature ⇒ Object
Returns the value of attribute signature.
8 9 10 |
# File 'lib/json/jwt.rb', line 8 def signature @signature end |
Class Method Details
.decode(jwt_string, public_key_or_secret = nil) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/json/jwt.rb', line 51 def decode(jwt_string, public_key_or_secret = nil) raise InvalidFormat.new('Invalid JWT Format. JWT should include 2 dots.') unless jwt_string.count('.') == 2 header, claims, signature = jwt_string.split('.', 3).collect do |segment| UrlSafeBase64.decode64 segment.to_s end signature_base_string = jwt_string.split('.')[0, 2].join('.') jwt = new JSON.parse(claims, :symbolize_names => true) jwt.header = JSON.parse(header, :symbolize_names => true) jwt.verify signature_base_string, signature, public_key_or_secret jwt rescue JSON::ParserError raise InvalidFormat.new("Invalid JSON Format") end |
Instance Method Details
#sign(private_key_or_secret, algorithm = :HS256) ⇒ Object
26 27 28 29 |
# File 'lib/json/jwt.rb', line 26 def sign(private_key_or_secret, algorithm = :HS256) header[:alg] = algorithm JWS.new(self).sign!(private_key_or_secret) end |
#to_s ⇒ Object
40 41 42 43 44 45 46 47 48 |
# File 'lib/json/jwt.rb', line 40 def to_s [ header.to_json, self.to_json, signature ].collect do |segment| UrlSafeBase64.encode64 segment.to_s end.join('.') end |
#verify(signature_base_string, signature = '', public_key_or_secret = nil) ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/json/jwt.rb', line 31 def verify(signature_base_string, signature = '', public_key_or_secret = nil) if header[:alg].to_s == 'none' raise UnexpectedAlgorighm if public_key_or_secret signature == '' or raise VerificationFailed else JWS.new(self).verify(signature_base_string, signature, public_key_or_secret) end end |