PHP - JWT получит токен неверного количества сегментов

Мне нужно использовать API с использованием JWT, для этого я собираю клиент API из PHP с использованием Guzzle и Firebase PHP-JWT

Документация API гласит: Подготовьте и опубликуйте JWT для авторизации.

URL конечной точки:

https://api.example.com/auth

JWT имеет три компонента: заголовок, полезную нагрузку и подпись.

Header: { "alg": "HS256", "typ": "JWT" }
Payload: { "clientId": "YOUR_CLIENT_ID","requestTime": "Y-m-d H:i:s" } (requestTime in GMT)
Signature: HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), YOUR_CLIENT_SECRET )

Код для получения токена следующий:

<?php

use \Firebase\JWT\JWT;

class Client 
{
    ...
    private function getAuthToken() 
    {
        $requestTime = date('Y-m-d H:i:s T', time());
        $payload = [
            'clientId' => 'A1b2C3d4E5',
            'requestTime' => $requestTime
        ];

        $key = '9z8Y7x6w5V4';
        $alg = 'HS256';
        $token = JWT::encode($payload, $key, $alg);

        $client = new \GuzzleHttp\Client;
        $headers = ['content_type' => 'application/x-www-form-urlencoded'];
        $response = $client->request('POST', 'https://api.example.com/auth', $headers, $token);
        $body = $response->getBody();
        $data = \json_decode($body->getContents());
    }
    ...
}

Если выведите $ data, я получу

stdClass Object
    (
        [success] => false
        [data] => Wrong number of segments 
    )

Моя проблема: я не знаю, из-за чего произошла эта ошибка, и если я отправляю запрос каким-то неправильным способом.

Я - новичок, потребляющий API-ресурс с JWT, и я предполагаю, что что-то неправильно строю. У меня есть некоторые значения статического способа только для проверки цели.

1 ответ

Решение

Моя ошибка заключалась в том, как я отправил токен, поскольку мне пришлось отправить его в теле запроса следующим образом:

....
$client = new \GuzzleHttp\Client;
$headers = [
    'content_type' => 'application/x-www-form-urlencoded',
    'body' => $token
];
$response = $client->request('POST', 'https://api.bodimetrics.com/auth', $headers);
....

При этом я получаю правильный ответ от API.

Другие вопросы по тегам