2013-03-07 7 views
5

Nie wiem, co robię źle, ale za każdym razem, gdy próbowałem uzyskać token (po autoryzacji użytkownika oczywiście), wynikiem jest zawsze Niepoprawny parametr/parametr parametru grant_type brakującyBox oauth2: Niepoprawny parametr lub parametr parametru grant_type Brak

prawdopodobnie związane z Box API always returns invalid grant_type parameter on obtaining access token

Oto mój wynik Skrzypek:

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] 

wynik:

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

Nawet po zwinięciu przykład podaje ten sam błąd. Każda pomoc będzie doceniona.

Edit: Próbowałem z dodatkowych redirect_uri params ale nadal ten sam błąd

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 

Wynik:

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

Sprawdź odpowiedź Johna Hoerr: http://stackoverflow.com/questions/15437525/box-api-oauth2-acces-token-request-error-invalid-grant-type-parameter-or-parame – entyer

Odpowiedz

12

Wygląda Box wymaga prawidłowego Content-Type: application/x-www-form-urlencoded żądania nagłówek oprócz prawidłowo URL kodowania parametrów. To samo odnosi się do odświeżania i odwoływania żądań.

Również za RFC 6749 The redirect_uri jest tylko

konieczne, jeśli "redirect_uri" parametr został uwzględniony we wniosku o dopuszczenie do jak opisano w rozdziale 4.1.1, a ich wartości muszą być identyczne.

+0

Dziękuję.Ogólny problem nie jest poprawny typ zawartości.Na koniec usunąłem redirect_uri z żądania formularza – metric

+1

Zastanawiam się nad tym przekierowaniem! Niektóre aplikacje nie wymagają przekierowania , jak android, więc to była tajemnica, dlaczego ktoś był potrzebny na żądanie. – light24bulbs

0

Brakuje parametru przekierowania URI. Spróbuj:

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

Próbowano z redirect_uri i dało to ten sam błąd :( – metric

0

Mam również ten sam problem z wdrażaniem oauth2. Dodałem Content-Type: application/x-www-form-urlencoded. Kiedy dodam content-type mój problem został rozwiązany.

Sprawdź i dodaj poprawny content-type.

0

Miałem do czynienia z podobnym problemem.

  • Problem nie dotyczy Content-Type.
  • Problem dotyczy cyklu życia otrzymywanego kodu.

Jednym z kluczowych aspektów nie wspomniano w większości miejsc jest to, że kod można uzyskać na przekierowanie trwa zaledwie 30 sekund.

Aby uzyskać token dostępu i token odświeżania, musisz wysłać prośbę o wpis w ciągu 30 sekund lub mniej.

Jeśli tego nie zrobisz, otrzymasz określony błąd. Znalazłem informacje here.

Poniższy kod pracował dla mnie. Pamiętaj o 30-sekundowej regule.

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) 

Nadzieję, że pomaga.

Powiązane problemy