Example #1
0
 /**
  * @param Context         $context
  * @param array|object    $payload
  * @param string|resource $key
  * @param string          $jwsAlgorithm
  * @param array           $extraHeaders
  *
  * @return string
  */
 public static function encode(Context $context, $payload, $key, $jwsAlgorithm, $extraHeaders = [])
 {
     $header = array_merge(['alg' => '', 'typ' => 'JWT'], $extraHeaders);
     $hashAlgorithm = $context->jwsAlgorithms()->get($jwsAlgorithm);
     if (null == $hashAlgorithm) {
         throw new JoseJwtException(sprintf('Unknown algorithm "%s"', $jwsAlgorithm));
     }
     $header['alg'] = $jwsAlgorithm;
     $payloadString = StringUtils::payload2string($payload, $context->jsonMapper());
     $signingInput = implode('.', [UrlSafeB64Encoder::encode(json_encode($header)), UrlSafeB64Encoder::encode($payloadString)]);
     $signature = $hashAlgorithm->sign($signingInput, $key);
     $signature = UrlSafeB64Encoder::encode($signature);
     return $signingInput . '.' . $signature;
 }