我想请求Apple服务器,但我花了很多时间仍收到此消息“身份验证凭据丢失或无效”。 。 谁能找出脚本在哪里使用错误? 遵循以下脚本。
require __DIR__ . '/vendor/autoload.php';
use Firebase\JWT\JWT;
date_default_timezone_set("Asia/Taipei");
header('Content-Type: application/json'); // Specify the type of data
此版本的Apple api标头和有效载荷
$privateKey =<<<EOD
-----BEGIN PRIVATE KEY-----
MY_privte_Key
-----END PRIVATE KEY-----
EOD;
$JWT_Header = array(
"kid"=> "xxxxx",
);
$JWT_Payload = array(
"iss"=> "xx-xx-xx",
"exp"=>time(),
"aud"=> "appstoreconnect-v1"
);
这将获得JWT令牌
$jwt = JWT::encode($JWT_Header, $privateKey, 'ES256','YPVNQH3M54');
$authorization = "Authorization: Bearer ".$jwt;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.appstoreconnect.apple.com/v1/users");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Set your auth headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Bearer ' . $authorization
));
此api响应
$response = curl_exec($ch);
echo "<pre>";
$err = curl_error($ch);
curl_close($ch);
if ($err) {
echo "cURL Error #:" . $err."<br>";
print_r(json_decode($response));
} else {
print_r(json_decode($response));
}
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
答案 0 :(得分:1)
您似乎将exp
声明设置为当前时间,这意味着您的令牌将立即失效。您应该将此设置为您希望令牌过期的时间。
由于您是在php页面中使用此令牌的,因此我假设它仅使用过一次。如果是这种情况,那么从现在开始30秒可能是安全的。足够长以解决时钟偏斜,但仍然很短以降低风险。
请记住,App Store Connect将拒绝将来超过20分钟到期的任何令牌。