oauth-2.0 - 如何使用刷新令牌获取访问令牌?
问题描述
首先,如果这个问题的格式不正确,我很抱歉。简单来说,我尝试连接的 API 服务器文档提供了以下指导:
身份验证工作流程身份验证工作流程包括两个步骤:
- 使用您的刷新令牌获取客户端范围的访问令牌
- 使用客户端范围的访问令牌访问资源
我被困在第一步。
我正在使用 Guzzle 6.x 并尝试通过 OAuth2 进行身份验证。
使用 Postman,我可以轻松获取访问令牌。我想在我的代码中使用 Guzzle 执行此操作。(或任何需要)。
Postman 生成了以下 PHP HttpRequest 片段。我可以用 Guzzle 做到这一点吗?(这个问题甚至有意义吗?)
<?php
$request = new HttpRequest();
$request->setUrl('https://api-tra/v3/partners/oauth2/token');
$request->setMethod(HTTP_METH_POST);
$request->setHeaders(array(
'cache-control' => 'no-cache',
'Connection' => 'keep-alive',
'Content-Length' => '559',
'Accept-Encoding' => 'gzip, deflate',
'Content-Type' => 'multipart/form-data; boundary=--------------------------158986490184667130446156',
'Host' => 'api-train.daxko.com',
'Postman-Token' => '28b9d8ac-d0ae-4036-9a61-202e9b39b220,f89cb196-9ada-4c1a-92f7-afc322fec03b',
'Cache-Control' => 'no-cache',
'Accept' => '*/*',
'User-Agent' => 'PostmanRuntime/7.19.0',
'Authorization' => 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3yYWluLWF1dGgiLCJzdWIiOiJmbWN3ZWJzaXRlX3RyYWluIiwiaWF0IjoxNTcwNTQ4OTE3LCJleHAiOjE1NzA1NDg5MTcsImFwaSI6Im9wc19hcGlfdjJfYXV0aCJ9.EnbGN121Ei5hlkPFT6Iqyd1h9_WXDGKplu5RsCH5QZs',
'content-type' => 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
));
$request->setBody('------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="grant_type"
client_credentials
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="client_id"
fmcwebsite_train
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="client_secret"
blC}g!!E@{+_k.VLH
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="scope"
client:2069
------WebKitFormBoundary7MA4YWxkTrZu0gW--');
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
解决方案
您正在使用客户端凭据,并且在该流程中通常不使用刷新令牌。相反,只需将访问令牌发送到 API。如果您长时间使用令牌,您可能还需要在调用 API 时检查 401 响应状态。如果是这样,则重新进行身份验证并使用新的访问令牌再次调用 API。
推荐阅读
- javascript - 谷歌浏览器控制台,显示javascript代码有问题
- sql - SQL-约束
- git - 创建 git 分支时出错 - 偏移量和长度超出了数组的范围
- facebook-javascript-sdk - Facebook leadgen webhook 订阅不起作用
- python - pip 以编程方式安装包,然后在不重新启动的情况下导入它
- modelica - 在初始化时只求解方程组一次
- r - 复制行并重新标记R中的两列
- angular - Angular 在哪里存储常量数据结构?
- sql - 无效操作:列引用“column_name”不明确 PostgreSql
- python-3.x - 检查python中两个分类对象数据类型列之间的关系