【问题标题】:Symfony get Oauth Token With Authorization codeSymfony 获取带有授权码的 Oauth 令牌
【发布时间】:2021-09-19 09:48:08
【问题描述】:

我在使用 OAuth 2.0 获取访问令牌时遇到了麻烦

我的网站请求授权码.. 并在获得授权码后重定向回我的页面.. 然后我有这些变量可用于发送访问令牌

我也尝试将参数放在查询中而不是标题中.. 和相同的结果

$response = $httpClient->request('POST', $tokenURL, [
  'headers' => [
    'code' => $_GET['code'],
    'client_id' => 'CLIENT ID',
    'client_secret' => 'CLIENT SECRET',
    'grant_type' => 'authorization_code',
    'redirect_uri' => 'https://127.0.0.1:8000/connect',
  ],
]);

我将此请求链接到一个按钮。所以当我按下按钮时,它会发送请求...

我收到 400 条回复,但我不知道我错过了什么!

【问题讨论】:

标签: php symfony oauth-2.0 oauth


【解决方案1】:

在对令牌端点的请求中,您应该在请求正文中发送参数,例如表单。目前您将它们发送到标题中,这是不对的。还要确保在调用令牌端点时验证客户端的正确方法是什么。您可能需要发送带有Basic 身份验证的Authorization 标头。

所以您的请求可能如下所示:

$response = $httpClient->request('POST', $tokenURL, [
  'body' => [
    'code' => $_GET['code'],
    'client_id' => 'CLIENT ID',
    'client_secret' => 'CLIENT SECRET',
    'grant_type' => 'authorization_code',
    'redirect_uri' => 'https://127.0.0.1:8000/connect',
  ],
]);

或者可能是这样的:

$response = $httpClient->request('POST', $tokenURL, [
  'headers' => [
    'Authorization' => 'Basic ' . base64_encode('CLIENT ID:CLIENT SECRET')
  ],
  'body' => [
    'code' => $_GET['code'],
    'grant_type' => 'authorization_code',
    'redirect_uri' => 'https://127.0.0.1:8000/connect',
  ],
]);

【讨论】:

  • 在“正文”中包含所有内容是正确的。我用 Postman 对其进行了测试,在我的网络应用程序上,我让它在没有给我错误的地方工作。但我似乎找不到日期.. 我尝试 var_dump($response) 并且数据不存在 :( 再次感谢您的所有帮助!现在我只是遇到了麻烦
  • 您应该调用$response->getContent() 来获取与响应相关的数据。您在响应对象上有其他方法,检查状态码等。查看 HttpClient 的文档以了解如何使用它:symfony.com/doc/current/http_client.html
  • 完美运行!!!!非常感谢,我完全错过了那部分……真可惜……因为向下 40 行……我有另一个 api 调用……显然使用了 getContent()……谢谢你的帮助!!!!跨度>
猜你喜欢
  • 2020-12-11
  • 2015-02-24
  • 2015-10-11
  • 2018-10-01
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多