module GoldenTicket
GoldenTicket
Module
GoldenTicket
Module
Constants
- VERSION
Version
Public Class Methods
Decode Base64URL: Base64-decodes a String which has been encoded with b64url_encode. @param [String] s An encoded String @return [String] The decoded chunk
# File lib/golden_ticket.rb, line 26 def self.b64url_decode s Base64.urlsafe_decode64 s + ('=' * (((s.length % 4) > 0) ? (4 - (s.length % 4)) : 0)) end
Encode Base64URL: Base64-encodes a String in way that plays nice with URLs (no special characters). @param [String] s A chunk to encode @return [String] The encoded string
# File lib/golden_ticket.rb, line 18 def self.b64url_encode s Base64.urlsafe_encode64(s).gsub('=', '').gsub "\n", '' end
Decode (Parse JWT): Splits up and decodes a given JSON Web Token, after having verified its authenticity. @param [String] key Used for SHA-256 hashing @param [String] token The token itself (duh…) @return [Object] The actual token information payload
# File lib/golden_ticket.rb, line 56 def self.decode key, token # Split Token header_data, payload_data, secret_data = token.split '.' # Verify Token secret = "#{header_data}.#{payload_data}" raise 'Invalid Token' unless secret_data == b64url_encode(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, secret)) # Pull dat Payload JSON.parse(b64url_decode(payload_data)).sym_keys end
Encode (Generate JWT): Produces a JSON Web Token (JWT) by SHA-256-hashing a payload's JSON representation. @param [String] key Used for SHA-256 hashing @param [Object] payload The Actual token information payload
# File lib/golden_ticket.rb, line 34 def self.encode key, payload # Prep Header - Always HMAC SHA 256 / JWT header = { alg: 'HS256', typ: 'JWT' } header_data = b64url_encode header.to_json # Prepare Payload payload_data = b64url_encode payload.to_json # Compute Token Secret secret = "#{header_data}.#{payload_data}" secret_data = b64url_encode OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), key, secret) # Generate Token "#{header_data}.#{payload_data}.#{secret_data}" end