Как реализовать iOS DeviceCheck в PHP - проблема с подписью токена JWT с помощью существующего закрытого ключа - PullRequest
1 голос
/ 11 марта 2019

Пытался реализовать 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, но я не понимаю, как я должен учитывать существующий закрытый ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...