Пытался реализовать Devicecheck для iOS. Это должно быть просто, так как у меня есть следующее руководство:
https://fluffy.es/devicecheck-tutorial/#jwt
И мне просто нужно конвертировать данный код Ruby в PHP.
Пробовал использовать openssl, но казалось, что ключи EC не поддерживаются. Я получил сообщение об ошибке «Тип ключа не поддерживается в этой сборке PHP!».
Итак, я обратился к JWT Framework.
Я могу создать ключ EC согласно:
https://web -token.spomky-labs.com / компоненты / ключ-JWK-и-набор ключей-jwkset / ключ-управления # эллиптической кривой пара ключей
но я не могу понять, как передать ему ранее существующее значение закрытого ключа (от 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, но я не понимаю, как я должен учитывать существующий закрытый ключ.