一直在尝试为iOS实现Devicecheck。这应该很简单,因为我要遵循以下指南:
https://fluffy.es/devicecheck-tutorial/#jwt
我只需要将给定的Ruby代码转换为PHP。
尝试使用openssl,但似乎不支持EC密钥。我收到错误消息“此PHP版本不支持密钥类型!”。
所以我转向了JWT框架。
我可以按照以下方式创建EC密钥:
但是我不知道如何将预先存在的(来自Apple的)私钥值传递给它,如Ruby示例一样。
到目前为止,这是我的代码:
public function jwtToken()
{
$private_key = env('DEVICE_CHECK_KEY_STRING');
$key_id = env('DEVICE_CHECK_KEY_ID');
$team_id = env('DEVICE_CHECK_TEAM_ID');
$algorithmManager = AlgorithmManager::create([
new ES256()
]);
$jwk = JWKFactory::createECKey('P-256');
$jsonConverter = new StandardConverter();
$jwsBuilder = new JWSBuilder(
$jsonConverter,
$algorithmManager
);
$payload = $jsonConverter->encode([
'iss' => $team_id,
'iat' => time()
]);
$jws = $jwsBuilder
->create()
->withPayload($payload)
->addSignature($jwk, ['alg' => 'ES256', 'kid' => $key_id])
->build();
$serializer = new CompactSerializer($jsonConverter);
$token = $serializer->serialize($jws, 0);
return $token;
}
这将生成一个JWT令牌,但我不知道如何考虑现有的私钥。