2013-03-07 726 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) 

希望有所幫助。