class JWT::Encode
Encoding logic for JWT
Attributes
algorithm[R]
header_fields[R]
key[R]
payload[R]
segments[R]
Public Class Methods
base64url_encode(str)
click to toggle source
# File lib/jwt/encode.rb, line 10 def self.base64url_encode(str) Base64.encode64(str).tr('+/', '-_').gsub(/[\n=]/, '') end
new(payload, key, algorithm, header_fields)
click to toggle source
# File lib/jwt/encode.rb, line 14 def initialize(payload, key, algorithm, header_fields) @payload = payload @key = key @algorithm = algorithm @header_fields = header_fields @segments = encode_segments end
Private Instance Methods
encode_segments()
click to toggle source
# File lib/jwt/encode.rb, line 43 def encode_segments header = encoded_header payload = encoded_payload signature = encoded_signature([header, payload].join('.')) [header, payload, signature].join('.') end
encoded_header()
click to toggle source
# File lib/jwt/encode.rb, line 24 def encoded_header header = { 'alg' => @algorithm }.merge(@header_fields) Encode.base64url_encode(JSON.generate(header)) end
encoded_payload()
click to toggle source
# File lib/jwt/encode.rb, line 29 def encoded_payload raise InvalidPayload, 'exp claim must be an integer' if @payload && @payload.is_a?(Hash) && @payload.key?('exp') && !@payload['exp'].is_a?(Integer) Encode.base64url_encode(JSON.generate(@payload)) end
encoded_signature(signing_input)
click to toggle source
# File lib/jwt/encode.rb, line 34 def encoded_signature(signing_input) if @algorithm == 'none' '' else signature = JWT::Signature.sign(@algorithm, signing_input, @key) Encode.base64url_encode(signature) end end