2013-03-07 725 views
5

我不知道我做错了什么,但每次尝试获取令牌时(在用户认证之后),结果总是无效grant_type参数或参数丢失Box oauth2:无效的grant_type参数或参数丢失

可能与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"} 

即使下面的卷曲示例也会出现相同的错误。任何帮助,将不胜感激。

编辑:额外REDIRECT_URI PARAMS试过,但还是同样的错误

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"} 
+0

检查约翰Hoerr回复:http://stackoverflow.com/questions/15437525/box-api-oauth2-acces-token-request-error-invalid-grant-type-parameter-or-parame – entyer 2016-02-18 19:05:37

回答

12

貌似盒需要一个正确的Content-Type: application/x-www-form-urlencoded请求头,除了正常的URL编码的参数。这似乎适用于刷新和撤销请求。

此外,每RFC 6749,所述redirect_uri

REQUIRED,如果“REDIRECT_URI”参数被包括在授权请求 如4.1.1节所描述的,和它们的值必须相同。

+0

谢谢。根本问题是没有一个正确的内容类型。最后我从表单请求中删除了redirect_uri – metric 2013-03-21 11:15:03

+1

我想知道这个重定向!有些应用程序不需要重定向,就像android一样,为什么需要这个请求是一个谜,谢谢! – light24bulbs 2015-05-06 21:15:57

0

你缺少重定向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] 
+0

尝试与redirect_uri和它给出了同样的错误:( – metric 2013-03-09 00:48:14

0

我也面临着实现oauth2的相同问题。我已添加Content-Type: application/x-www-form-urlencoded。当我添加content-type我的问题解决了。

检查并添加有效的content-type

0

我正面临类似的问题。

  • 问题不在于Content-Type。
  • 问题在于您收到的代码的生命周期。在大多数地方没有提及

一个重要的方面是,你会得到重定向代码只持续30秒

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

如果你不这样做,你会得到明确的错误。我找到了信息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) 

希望有所帮助。