アクセストークンの取得に失敗します

「スマレジ・プラットフォームAPI 共通仕様書」に倣ってアクセストークンの取得を行おうとしているのですが、Postmanで実行する分には正常に取得できるのですが、それを c# で実装しようとすると"unsupported_grant_type"で取得に失敗します。

Postman の出力するコードを元に以下のようにしているのですが、間違っている個所がありましたらご指摘願えませんでしょうか。

var client = new RestClient("https://id.smaregi.dev/app/******/token");

var request = new RestRequest() { Method = Method.Post };

request.AddHeader("Content-Type", "application/x-www-form-urlencoded");

request.AddHeader("Authorization", "Basic *******************************");

request.AlwaysMultipartFormData = true;

request.AddParameter("grant_type", "client_credentials");

request.AddParameter("scope", "pos.stores:read pos.stores:write");

RestResponse response = client.Execute(request);

Console.WriteLine(response.Content);

ベストアンサー

  • @yokota

    grant_type の値が間違っているほかに、grant_type の値がない(もしくは取れていない)というケースでもエラーになります。

    またContent-Type が application/x-www-form-urlencoded である必要もあるため、そちらもご確認ください。

答え

  • @yokota

    ご認識いただいている通りで、grant_typeは基本仕様書に記載の通りclient_credentialsを指定ください。

    なお、特定の言語やライブラリについてのサポートはいたしかねます。ご了承ください。

  • ご回答ありがとうございます。

    そして、失礼いたしました。


    それでは、特定の言語やライブラリという意味ではなく、

    grant_type に client_credentials を設定しているが、unsupported_grant_type になります。どういった可能性が考えられますでしょうか?

    何か考えられる事がありましたら、ご教示願えませんでしょうか。

  • ご回答ありがとうございます。

    解決しましたのでご報告致します。

    元の質問のコードの

    >request.AlwaysMultipartFormData = true;

    この行が原因で Content-Type に齟齬が生じて grant_type が正しく読まれなかったようです。

    その為、上記の一行を削除することで正常にアクセストークンが取得できました。


    ちなみに、上記一行を残す必要がある場合。Content-Type に multipart/form-data を指定すればアクセストークンの取得ができるようですが、

    本来のやり方とは異なるのでオススメは致しません。

    (ただ、Postman は内部的にそんなリクエストを投げているようで、その結果コードの自動生成で余計なコードが吐き出されているのだと思われます)


    色々とありがとうございました。