Ale*_*Ale 6 php jwt firebase guzzle6
我需要使用 JWT 使用 API,为此,我使用Guzzle和Firebase PHP-JWT从 PHP 构建 API 客户端
API 的文档说:准备并发布 JWT 以进行授权。
端点网址:
https://api.example.com/auth
Run Code Online (Sandbox Code Playgroud)
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 )
Run Code Online (Sandbox Code Playgroud)
获取token的代码如下:
<?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());
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果打印 $data 我得到
stdClass Object
(
[success] => false
[data] => Wrong number of segments
)
Run Code Online (Sandbox Code Playgroud)
我的问题: 我不知道为什么会出现此错误以及我是否以某种不正确的方式发送请求。
我是一个使用 JWT 使用 API 资源的新手,我想我正在以错误的方式构建某些东西。我有一些静态方式的值只是为了测试目的。
我的错误在于发送令牌的方式,因为我必须通过以下方式在请求正文中发送它:
....
$client = new \GuzzleHttp\Client;
$headers = [
'content_type' => 'application/x-www-form-urlencoded',
'body' => $token
];
$response = $client->request('POST', 'https://api.example.com/auth', $headers);
....
Run Code Online (Sandbox Code Playgroud)
这样我就可以从 API 得到正确的响应。
| 归档时间: |
|
| 查看次数: |
13623 次 |
| 最近记录: |