Php Amazon IVS Url验证令牌

Php Amazon IVS Url验证令牌,php,amazon-web-services,url,encryption,pem,Php,Amazon Web Services,Url,Encryption,Pem,似乎无法使此Url签名与Amazon IVS一起工作。我正在使用来自的软件包。我需要获得ES384签名才能保护我的实时流 这是我的密码 /** * _signUrl * * */ private function _signUrl($playbackUrl, $channelArn){ $header = [ "alg" => "ES384", "typ" => &quo

似乎无法使此Url签名与Amazon IVS一起工作。我正在使用来自的软件包。我需要获得ES384签名才能保护我的实时流

这是我的密码

 /**
 * _signUrl
 * 
 * 
 */
private function _signUrl($playbackUrl, $channelArn){
    $header = [
        "alg" => "ES384",
        "typ" => "JWT"
    ];
    
    $payload = [
        "aws:channel-arn" => $channelArn,
       // "aws:access-control-allow-origin" => "<your-website>",
        "exp" => \Carbon\Carbon::now()->addDays(3)->timestamp
    ];

    $signer = new \Lcobucci\JWT\Signer\Ecdsa\Sha384();
    
    $privateKey = InMemory::plainText("
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDDuRdOUNt1lb0OHoDioTKRVOoRYqvyRnjCBZydC9kG7eb1pb0E3r+Wq
6jUEx9Zs1xWgBwYFK4EEACKhZANiAATsETeLPGzsREFHl/K9WFuLMrLazwH64de0
TOgMK9VqCseILxAJVtIuwN/jmBBFLUwe/MdVXpxPzgp60KTVNOqRla73oVdhYOHA
nevl9sJSns1fN3pMsf2TmXBX/B7/O2g=
-----END EC PRIVATE KEY-----
");
    
    $base64Encoded = (base64_encode(implode($header)).base64_encode(implode($payload)));
    $sign = $signer->sign($base64Encoded, $privateKey);
    
    $token = bin2hex($sign);
    
    return "{$playbackUrl}?token={$token}";
}
/**
*_signUrl
* 
* 
*/
私有函数_signUrl($playbackUrl,$channelArn){
$header=[
“alg”=>“ES384”,
“典型”=>“JWT”
];
$payload=[
“aws:channel arn”=>$channelArn,
//“aws:访问控制允许原点”=>“”,
“exp”=>\Carbon\Carbon::now()->addDays(3)->时间戳
];
$signer=new\Lcobucci\JWT\signer\Ecdsa\Sha384();
$privateKey=InMemory::明文(“
-----开始EC私钥-----
Migkagebbddurdunt1lb0ohodiotkrvooryqvyrnjcbzydc9kg7eb1pb0e3r+Wq
6JUEX9ZS1XWGBWYFK4EEACKHZANIAATTELPGZSREFHL/K9WFuLMrLazwH64de0
TOgMK9VqCseILxAJVtIuwN/jmBBFLUwe/MDVXPXPZGP60KTVNOKRLA73OVDHYOHA
nevl9sJSns1fN3pMsf2TmXBX/B7/O2g=
-----结束EC私钥-----
");
$base64Encoded=(base64_编码(内爆($header)).base64_编码(内爆($payload));
$sign=$signer->sign($base64Encoded,$privateKey);
$token=bin2hex($sign);
返回“{$playbackUrl}?令牌={$token}”;
}
从url获取此信息

错误“格式错误的播放身份验证令牌”
错误代码“无效的\u播放\u验证\u令牌”

您需要使用为url设计的自定义版本的base 64编码和解码

  if ( ! function_exists('base64url_encode')){
    

    /**
     * Encode data to Base64URL
     * @param string $data
     * @return boolean|string
     */
    function base64url_encode($data)
    {
      // First of all you should encode $data to Base64 string
      $b64 = base64_encode($data);

      // Make sure you get a valid result, otherwise, return FALSE, as the base64_encode() function do
      if ($b64 === false) {
        return false;
      }

      // Convert Base64 to Base64URL by replacing “+” with “-” and “/” with “_”
      $url = strtr($b64, '+/', '-_');

      // Remove padding character from the end of line and return the Base64URL result
      return rtrim($url, '=');
    }
    

}

if ( ! function_exists('base64url_decode')){
    

    /**
     * Decode data from Base64URL
     * @param string $data
     * @param boolean $strict
     * @return boolean|string
     */
    function base64url_decode($data, $strict = false)
    {
      // Convert Base64URL to Base64 by replacing “-” with “+” and “_” with “/”
      $b64 = strtr($data, '-_', '+/');

      // Decode Base64 string and return the original data
      return base64_decode($b64, $strict);
    }

}
这是一个完整的更新功能

   /**
     * _signUrl
     * 
     * 
     */
    private function _signUrl($playbackUrl, $channelArn){
      

        $signer = new \Lcobucci\JWT\Signer\Ecdsa\Sha384();
        
        $privateKey = InMemory::plainText("
-----BEGIN EC PRIVATE KEY-----
MIGkAgEBBDDuRdOUNt1lb0OHoDioTKRVOoRYqvyRnjCBZydC9kG7eb1pb0E3r+Wq
6jUEx9Zs1xWgBwYFK4EEACKhZANiAATsETeLPGzsREFHl/K9WFuLMrLazwH64de0
TOgMK9VqCseILxAJVtIuwN/jmBBFLUwe/MdVXpxPzgp60KTVNOqRla73oVdhYOHA
nevl9sJSns1fN3pMsf2TmXBX/B7/O2g=
-----END EC PRIVATE KEY-----
");

        $token = "";
        $token .= (base64url_encode( json_encode( [
            "alg" => "ES384",
            "typ" => "JWT"
        ])));
                
        $token .= ".".(base64url_encode( json_encode( [
        "aws:channel-arn" => $channelArn,
        "exp" => \Carbon\Carbon::now()->addDays(3)->timestamp]
        )));
        
                
        $signPart = $signer->sign($token, $privateKey);
        
        $tokenComplete = $token.".". base64url_encode($signPart);
        

        
        return "{$playbackUrl}?token={$tokenComplete}";
    }