web-dev-qa-db-ja.com

ボックスoauth2:無効なgrant_typeパラメーターまたはパラメーターがありません

何が間違っているのかわかりませんが、トークンを取得しようとするたびに(もちろんユーザー認証後)、結果は常に無効なgrant_typeパラメーターまたはパラメーターがありません

おそらく関連している ボックスAPIはアクセストークンの取得時に常に無効なgrant_typeパラメータを返します

これが私のフィドラーの結果です:

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パラメーターで試行しましたが、それでも同じエラーです

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

Boxには、パラメータを適切にURLエンコードすることに加えて、正しいContent-Type: application/x-www-form-urlencodedリクエストヘッダーが必要なようです。同じことが、リクエストの更新と取り消しにも当てはまるようです。

また、 RFC 6749 によると、redirect_uri

セクション4.1.1で説明されているように、「redirect_uri」パラメータが承認リクエストに含まれていて、それらの値が同一である必要がある場合は必須です。

14
user2174840

私も同様の問題に直面していました。

  • 問題はContent-Typeではありません。
  • 問題は、受け取るコードのライフサイクルにあります。

ほとんどの場所で言及されていない重要な側面の1つは、リダイレクトで取得するコードが30秒しか持続しないことです。

アクセストークンと更新トークンを取得するには、30秒以内にPOSTリクエストを行う必要があります。

これを怠ると、記載されているエラーが発生します。私は情報を見つけました ここ

以下のコードは私のために働いた。 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)

お役に立てば幸いです。

2
Saransh Singh

リダイレクト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]
1
Rivers

将来誰がこれを必要とするかはわかりませんが、アクセストークンを取得するためにPOSTリクエストを送信し、GETを使用して取得しようとしないか、テスト貼り付けを行っているかどうかを確認してくださいアドレスバーが機能しない場合は、クエリパラメータとしてではなく、BODYのデータを使用してPOSTリクエストを送信する必要があります。

また、コードは通常数秒間続くので、返送されたらすぐに使用する必要があります。

0
Uriahs Victor

Oauth2の実装でも同じ問題に直面しています。 Content-Type: application/x-www-form-urlencodedを追加しました。 content-typeを追加すると、問題は解決しました。

有効なcontent-typeを確認して追加します。

0
Kumar