アクセストークンが取得できません
ドキュメントのスタートガイド通りに
アプリを登録して、クライアントIDとクライアントシークレットを指定して
アクセストークン取得を行いましたが、以下のエラーメッセージが返ってきて取得できませんでした。
(アクセストークン取得には Postman v7.35 を使用しました。)
"type": "https://api.smaregi.jp/problems/oauth2/unsupported_grant_type",
"title": "Unsupported Grant Type",
"status": 400,
"error": "unsupported_grant_type",
"error_description": "The authorization grant type is not supported by the authorization server.",
"hint": "Check that all required parameters have been provided"
ベストアンサー
-
Unsupported Grant Type
とあるように、こちらのエラーはリクエストボディの
grant_type
が誤っている可能性があります。スタートガイドだけでなくこちらもご覧になるとわかりやすいかも知れません。
---
念の為、私の取得方法を共有させていただきます。
取得フロー
URL
注意していただきたいのは、サンドボックスに要求するときは
https://id.smaregi.dev
を指定し、本番環境に要求するときはhttps://id.smaregi.jp
を指定します。取得イメージ
以下はPostmanを利用した場合の画面になります。(重要情報は表示できません。ご了承ください。)
契約ID
開発段階であれば、契約IDはご自身のサンドボックス環境の契約IDを指定して下さい。
この情報は画面の左上に載っています。
スコープ
有効にしたいスコープリストはご自身の開発されるアプリにあったスコープを指定してください。
仕様書に記載の通り、必須です。指定がない場合でもトークンを取得することはできますが、そのトークンはスコープのないトークンとなりますので、APIで利用することは難しいかと思います。
scope ○ 要求するAPIスコープ。複数の場合は半角スペースで結合して指定。
grant_type
アプリアクセストークンを取得する場合は
client_credentials
を指定してください。Authorization
開発段階であれば、環境設定画面の「開発」タブの下部に認可情報が載っています。
こちらを
クライアントID:クライアントシークレット
という感じに文字列結合し、Base64
でエンコードしたものをリクエストヘッダーに設定してください。疑問点がありましたら、またコメントしてくださいませ。
よろしくお願いいたします。
答え
私も400エラーが出ておりますがパラメーターが足りないのでしょうか。
Postman
{
"type": "https://api.smaregi.jp/problems/oauth2/invalid_request",
"title": "Invalid Request",
"status": 400,
"error": "invalid_request",
"error_description": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.",
"hint": "Check the `client_id` parameter"
}
@開発担当
"hint": "Check the `client_id` parameter"
とありますので、クライアントIDが誤っている可能性があります。Postmanを利用しているということですので、下図を参考にしてみてください。
疑問点がありましたら、またコメントしてくださいませ。
よろしくお願いいたします。
@スマレジ保坂
ありがとうございます。
無事アクセストークン取得を理解いたしました。
私のほうでは認証エラーが出ております。
{
"type": "https://api.smaregi.jp/problems/oauth2/invalid_client",
"title": "Invalid Client",
"status": 401,
"error": "invalid_client",
"error_description": "Client authentication failed"
}
PostmanのAuthorizationのTYPEでBasicAuthを選択してBase64でエンコードしたクライアントIDをUsernameへ、
クライアントシークレットをPasswordへ入力しております。
@s_harada
こちらのPostmanラーニングページを御覧ください。
Base64でエンコードしたクライアントIDをUsername
PostmanでBasic Authに入力するときは、エンコードせずにそのままクライアントIDを入力してみてください。
何か他に疑問点ありましたら、コメントしてくださいませ。
@スマレジ保坂
アクセストークン取得できました!
ありがとうございました。