module MagentaSSO

A library to implement a MagentaSSO provider or client.

Constants

VERSION

Public Class Methods

encode_and_sign(payload, secret) click to toggle source

Encode the payload and generate a signature with the secret.

# File lib/magentasso.rb, line 19
def encode_and_sign(payload, secret)
  secret = Base32.decode(secret)

  payload = JSON.generate(payload)
  payload = Base64.urlsafe_encode64(payload, padding: true)
  signature = OpenSSL::HMAC.digest("SHA256", secret, payload)
  signature = Base64.urlsafe_encode64(signature, padding: true)

  [payload, signature]
end
verify_and_decode(payload, signature, secret) click to toggle source

Verify the signature using the secret, and return the decoded payload.

# File lib/magentasso.rb, line 31
def verify_and_decode(payload, signature, secret)
  secret = Base32.decode(secret)

  signature = Base64.urlsafe_decode64(signature)
  our_signature = OpenSSL::HMAC.digest("SHA256", secret, payload)
  raise MagentaSSO::SignatureError unless signature == our_signature

  payload = Base64.urlsafe_decode64(payload)
  JSON.parse(payload)
end