class JWT::Decode
Decoding logic for JWT
Attributes
header[R]
payload[R]
signature[R]
Public Class Methods
base64url_decode(str)
click to toggle source
# File lib/jwt/decode.rb, line 10 def self.base64url_decode(str) str += '=' * (4 - str.length.modulo(4)) Base64.decode64(str.tr('-_', '+/')) end
new(jwt, verify)
click to toggle source
# File lib/jwt/decode.rb, line 15 def initialize(jwt, verify) @jwt = jwt @verify = verify @header = '' @payload = '' @signature = '' end
Public Instance Methods
decode_segments()
click to toggle source
# File lib/jwt/decode.rb, line 23 def decode_segments header_segment, payload_segment, crypto_segment = raw_segments @header, @payload = decode_header_and_payload(header_segment, payload_segment) @signature = Decode.base64url_decode(crypto_segment.to_s) if @verify signing_input = [header_segment, payload_segment].join('.') [@header, @payload, @signature, signing_input] end
Private Instance Methods
decode_header_and_payload(header_segment, payload_segment)
click to toggle source
# File lib/jwt/decode.rb, line 40 def decode_header_and_payload(header_segment, payload_segment) header = JSON.parse(Decode.base64url_decode(header_segment)) payload = JSON.parse(Decode.base64url_decode(payload_segment)) [header, payload] rescue JSON::ParserError raise JWT::DecodeError, 'Invalid segment encoding' end
raw_segments()
click to toggle source
# File lib/jwt/decode.rb, line 33 def raw_segments segments = @jwt.split('.') required_num_segments = @verify ? [3] : [2, 3] raise(JWT::DecodeError, 'Not enough or too many segments') unless required_num_segments.include? segments.length segments end