58 $this->app = $facebookApp;
60 if (!$rawSignedRequest) {
64 $this->rawSignedRequest = $rawSignedRequest;
76 return $this->rawSignedRequest;
86 return $this->payload;
97 public function get($key, $default =
null)
99 if (isset($this->payload[$key])) {
100 return $this->payload[$key];
113 return $this->
get(
'user_id');
123 return $this->
get(
'oauth_token') || $this->
get(
'code');
133 public function make(array $payload)
135 $payload[
'algorithm'] = isset($payload[
'algorithm']) ? $payload[
'algorithm'] :
'HMAC-SHA256';
136 $payload[
'issued_at'] = isset($payload[
'issued_at']) ? $payload[
'issued_at'] :
time();
137 $encodedPayload = $this->base64UrlEncode(json_encode($payload));
139 $hashedSig = $this->hashSignature($encodedPayload);
140 $encodedSig = $this->base64UrlEncode($hashedSig);
142 return $encodedSig .
'.' . $encodedPayload;
151 list($encodedSig, $encodedPayload) = $this->split();
154 $sig = $this->decodeSignature($encodedSig);
155 $hashedSig = $this->hashSignature($encodedPayload);
156 $this->validateSignature($hashedSig, $sig);
158 $this->payload = $this->decodePayload($encodedPayload);
161 $this->validateAlgorithm();
173 if (strpos($this->rawSignedRequest,
'.') ===
false) {
177 return explode(
'.', $this->rawSignedRequest, 2);
191 $sig = $this->base64UrlDecode($encodedSig);
211 $payload = $this->base64UrlDecode($encodedPayload);
214 $payload = json_decode($payload,
true);
217 if (!is_array($payload)) {
231 if ($this->
get(
'algorithm') !==
'HMAC-SHA256') {
247 $hashedSig = hash_hmac(
250 $this->app->getSecret(),
271 if (\hash_equals($hashedSig, $sig)) {
291 $urlDecodedBase64 = strtr($input,
'-_',
'+/');
292 $this->validateBase64($urlDecodedBase64);
294 return base64_decode($urlDecodedBase64);
310 return strtr(base64_encode($input),
'+/',
'-_');
322 if (!preg_match(
'/^[a-zA-Z0-9\/\r\n+]*={0,2}$/', $input)) {