要为api连接生成身份验证标头,我的代码应遵循以下步骤:
据我所知,php 中的字符串是字节数组,所以我的初始方法如下所示.
public function generateAuthKey()
{
$unique = uniqid(); # unique string
$string = $unique.':'.$this->apiKey; # step 1
$string = utf8_encode($string); # step 2 ?
$hash = hash('sha256', $string); # step 3
$base64 = base64_encode($hash); # step 4
return $base64;
}
Run Code Online (Sandbox Code Playgroud)
尝试使用此身份验证密钥进行连接的应用程序将收到403错误.
上面的代码是否完成了所需的步骤(也许我的api密钥中有错误)或者是否有其他方式在php中按照创建auth密钥的步骤进行操作?
是的,PHP 中的字符串已经是字节数组.除非你$string包含任何非ASCII字符,否则它也是有效的UTF-8(UTF-8是ASCII的超集); 所以你可以跳过"编码为UTF-8"的步骤.
可能该算法期望散列的输出是二进制的,然后您应该将其转换为base 64.默认情况下hash返回十六进制值,而不是二进制.为此,您需要设置其第三个参数.综上所述:
$unique = uniqid();
$string = $unique . ':' . $this->apiKey;
$hash = hash('sha256', $string, true);
$base64 = base64_encode($hash);
Run Code Online (Sandbox Code Playgroud)
当然,你应该做的事$unique我不知道.可能你也应该将该值与请求一起发送,否则服务器无法验证哈希值.