2013-03-07 3 views
5

Я не знаю, что делаю неправильно, но каждый раз, когда я пытался получить токен (после аутентификации пользователя, конечно), результат всегда недопустим. Параметр или параметр параметра grant_type отсутствуетВставка 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"} 

Даже после скругления пример дает ту же ошибку. Любая помощь будет оценена по достоинству.

Edit: пытались с дополнительными 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

Проверка John Hoerr: http://stackoverflow.com/questions/15437525/box-api-oauth2-acces-token-request-error-invalid-grant-type-parameter-or-parame – entyer

ответ

12

Похож Box требуется правильный заголовок Content-Type: application/x-www-form-urlencoded запроса в дополнении к правильному URL кодирующей параметры. То же самое относится к обновлению и отзыву запросов.

Кроме того, за RFC 6749, то redirect_uri только

ТРЕБУЕМОГО, если параметр «redirect_uri» был включен в запросе авторизации , как описано в разделе 4.1.1, а их значения должны быть одинаковыми.

+0

Спасибо. Корневая проблема не имеет правильного типа содержимого. В конце концов я удалил redirect_uri из запроса формы – metric

+1

Мне было интересно, что перенаправление! Некоторые приложения не нуждаются в перенаправлении , как и андроид, так что было загадкой, почему нужно было по запросу. Спасибо! – light24bulbs

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

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) 

Надеюсь, что это поможет.

Смежные вопросы