【问题标题】:Box oauth2: Invalid grant_type parameter or parameter missing框 oauth2:无效的 grant_type 参数或缺少参数
【发布时间】:2019-10-22 05:29:38
【问题描述】:

我不知道我做错了什么,但是每次我尝试获取令牌(当然是在用户认证之后),结果总是 Invalid grant_type parameter 或 parameter missing

可能与Box API always returns invalid grant_type parameter on obtaining access token有关

这是我的提琴手结果:

POST https://api.box.com/oauth2/token HTTP/1.1
Host: api.box.com
Content-Length: 157
Expect: 100-continue
Connection: Keep-Alive

grant_type=authorization_code&code=nnqtYcoik7cjtHQYyn3Af8uk4LG3rYYh&client_id=[myclientId]&client_secret=[mysecret]

结果:

HTTP/1.1 400 Bad Request
Server: nginx
Date: Thu, 07 Mar 2013 11:18:36 GMT
Content-Type: application/json
Connection: keep-alive
Set-Cookie: box_visitor_id=5138778bf12a01.27393131; expires=Fri, 07-Mar-2014 11:18:35 GMT; path=/; domain=.box.com
Set-Cookie: country_code=US; expires=Mon, 06-May-2013 11:18:36 GMT; path=/
Cache-Control: no-store
Content-Length: 99

{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}

即使遵循 curl 示例也会出现相同的错误。任何帮助将不胜感激。

编辑:尝试使用额外的 redirect_uri 参数,但仍然是同样的错误

POST https://api.box.com/oauth2/token HTTP/1.1
Content-Type: application/json; charset=UTF-8
Host: api.box.com
Content-Length: 187
Expect: 100-continue
Connection: Keep-Alive

grant_type=authorization_code&code=R3JxS7UPm8Gjc0y7YLj9qxifdzBYzLOZ&client_id=*****&client_secret=*****&redirect_uri=http://localhost

结果:

HTTP/1.1 400 Bad Request
Server: nginx
Date: Sat, 09 Mar 2013 00:46:38 GMT
Content-Type: application/json
Connection: keep-alive
Set-Cookie: box_visitor_id=513a866ec5cfe0.48604831; expires=Sun, 09-Mar-2014 00:46:38 GMT; path=/; domain=.box.com
Set-Cookie: country_code=US; expires=Wed, 08-May-2013 00:46:38 GMT; path=/
Cache-Control: no-store
Content-Length: 99

{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}

【问题讨论】:

标签: oauth-2.0 box-api


【解决方案1】:

看起来 Box 除了正确地对参数进行 URL 编码外,还需要正确的 Content-Type: application/x-www-form-urlencoded 请求标头。这似乎同样适用于刷新和撤销请求。

另外,根据RFC 6749redirect_uri 是唯一的

需要,如果“redirect_uri”参数包含在授权请求中 如第 4.1.1 节所述,它们的值必须相同。

【讨论】:

  • 谢谢。根本问题是没有正确的内容类型。最后我从表单请求中删除了redirect_uri
  • 我想知道那个重定向!有些应用程序不需要重定向,比如 android,所以为什么在请求中需要重定向是个谜。谢谢!
  • 我的grant_type 末尾有一个空格。删除它,它工作得很好。
【解决方案2】:

我也遇到了类似的问题。

  • 问题不在于 Content-Type。
  • 问题在于您收到的代码的生命周期。

大多数地方没有提到的一个关键方面是您在重定向时获得的代码仅持续 30 秒

要获取访问令牌和刷新令牌,您必须在 30 秒或更短的时间内发出 post 请求。

如果您不这样做,您将收到所述错误。我找到了信息here

以下代码对我有用。请记住,30 秒规则。

import requests

url = 'https://api.box.com/oauth2/token'

data = [
    ('grant_type', 'authorization_code'),
    ('client_id', 'YOUR_CLIENT_ID'),
    ('client_secret', 'YOUR_CLIENT_SECRET'),
    ('code', 'XXXXXX'),
]

response = requests.post(url, data=data)

print(response.content)

希望对您有所帮助。

【讨论】:

  • 谢谢,我以为我使用的 API 坏了,但问题是这 30 秒
  • 这应该是公认的答案!即使是通过 burp 发出的正常请求,我也无法解决问题(我仍然是如何正确处理它们的新手),但这为我解决了问题
【解决方案3】:

您缺少重定向 URI 参数。试试:

POST https://api.box.com/oauth2/token HTTP/1.1
Host: api.box.com
Content-Length: 157
Expect: 100-continue
Connection: Keep-Alive

grant_type=authorization_code&code=nnqtYcoik7cjtHQYyn3Af8uk4LG3rYYh&client_id=[myclientId]&client_secret=[mysecret]&redirect_uri=[your-redirect-uri]

【讨论】:

    【解决方案4】:

    我在实现 oauth2 时也遇到了同样的问题。我添加了Content-Type: application/x-www-form-urlencoded。当我添加 content-type 我的问题解决了。

    检查并添加有效的content-type

    【讨论】:

      【解决方案5】:

      不确定将来谁可能需要此功能,但请确保您发送 POST 请求以获取访问令牌,而不是尝试使用 GET 检索它,或者如果您正在测试 - 在地址栏中粘贴将不会’ t 工作,您需要发送 POST 请求,其中包含 BODY 中的数据,而不是作为查询参数。

      而且代码通常会持续几秒钟,因此您需要在发送回后立即使用它。

      【讨论】:

        猜你喜欢
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 2012-06-27
        相关资源
        最近更新 更多