【问题标题】:How do I get an access token using a refresh token?如何使用刷新令牌获取访问令牌?
【发布时间】:2020-02-26 08:42:09
【问题描述】:

首先,如果这个问题的格式不正确,我深表歉意。 简单来说,我尝试连接的 API 服务器文档提供了以下指导:

身份验证工作流程 身份验证工作流程包括两个步骤:

  1. 使用刷新令牌获取客户端范围的访问令牌
  2. 使用客户端范围的访问令牌访问资源

我被困在第一步。

我正在使用 Guzzle 6.x 并尝试通过 OAuth2 进行身份验证。

使用 Postman,我可以轻松获取访问令牌。我想在我的代码中使用 Guzzle 执行此操作。 (或任何需要的东西)。

Postman 生成了以下 PHP HttpRequest sn-p。我可以用 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;
}

【问题讨论】:

    标签: oauth-2.0 guzzle6


    【解决方案1】:

    您正在使用客户端凭据,并且在该流程中通常不使用刷新令牌。相反,只需将访问令牌发送到 API。如果您长时间使用令牌,您可能还需要在调用 API 时检查 401 响应状态。如果是,则重新进行身份验证并使用新的访问令牌再次调用 API。

    【讨论】:

    • 我没有访问令牌。如 API 源的 API 文档中所述。身份验证工作流程 身份验证工作流程包括两个步骤: 1. 使用刷新令牌获取客户端范围的访问令牌 2. 使用客户端范围的访问令牌访问资源。 Kamermans/Guzzle Oauth2 客户端记录了一个问题,该问题可能比我做得更好。 github.com/kamermans/guzzle-oauth2-subscriber/issues/14
    • 没错……我用“邮递员”应用程序证明了这一点……回到原来的问题;我如何使用 Guzzle 做到这一点?
    猜你喜欢
    • 2015-07-19
    • 2020-07-12
    • 2013-09-05
    • 2019-09-09
    • 2013-08-23
    • 2022-01-23
    • 2021-01-29
    • 2018-11-26
    相关资源
    最近更新 更多