class JWT attr_reader :data, :signature def initialize(data) if data.class == String @parts = data.split('.') @header = JSON.parse Base64.urlsafe_decode64(@parts[0]) @data = JSON.parse Base64.urlsafe_decode64(@parts[1]) @signature = @parts[2] else @header = defaultHeader @data = data end end def defaultHeader return { 'alg' => 'HS256', 'typ' => 'jwt' } end def toString string = Base64.urlsafe_encode64(@header.to_json).tr('=', '') + '.' + Base64.urlsafe_encode64(@data.to_json) .tr('=', '') string = string + '.' + OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), Rails.application.credentials.secret_key_base, string).tr('=', '') return string end end