Skip to content

Instantly share code, notes, and snippets.

@fredoliveira
Created November 17, 2010 19:50
Show Gist options
  • Save fredoliveira/703941 to your computer and use it in GitHub Desktop.
Save fredoliveira/703941 to your computer and use it in GitHub Desktop.
Parses Facebook OAuth2.0 Signed requests. Ported to Ruby from Facebook's PHP SDK.
# ported to ruby by [email protected]
require 'rubygems'
require 'base64'
gem 'json'
require 'json'
require 'openssl'
def parse_facebook_request(str, app_secret)
string = str.split(".") # splits our signed request
encodedsig = string[0] # signature
payload = string[1] # payload
sig = base64_url_decode(encodedsig)
data = JSON.parse(base64_url_decode(payload))
if(data["algorithm"] != "HMAC-SHA256")
puts "Expected HMAC-SHA256, got something else."
return nil
end
hash = OpenSSL::HMAC.digest('sha256', app_secret, payload)
if(sig != hash)
puts "Bad signed JSON signature"
return nil
end
return data
end
def base64_url_decode(str)
str += '=' * (4 - str.length.modulo(4))
#puts str
Base64.decode64(str.gsub("-", "+").gsub("_", "/"))
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment