grant_typeについて

kintone.proxyを利用して外部APIと接続を試みていますが、
400 {error: “invalid_request”, error_description: “Request is missing grant type.”} 
と返ってきます。

接続先のcurlでのサンプルでは、

$ curl -v https://api.makeleaps.com/user/oauth2/token/ \
-X POST \
-u "CLIENT_ID:CLIENT_SECRET" \
-d "grant_type=client_credentials"

上記の様に記載されており、これに従ってCurlでテストしたときは200が返ってきます。

kintoneマッシュアップのための豆知識(curlコマンドとkintone.proxy()の対応)を拝見する限り、
④リクエストデータ(フォーム形式) -d “{key}={value}” 第4引数「date」 ’ “{key}={value}” ’
4番目の引数にgrant_type=client_credentialsと入れてあげるだけだと思うのですが、grant typeを認識してくれません。

var basic_token = clientApiKey+“:”+clientSecret;

var baseUrl = “https://api.makeleaps.com”;
var getTokenUrl = baseUrl + “/user/oauth2/token/”;
var generalApiUrl = baseUrl + “/api/”;

var headers = {
“Content-Type” : “application/json”,
“Authentication” : "Basic " + basic_token
};

var contents = “grant_type=client_credentials”;

kintone.proxy(getTokenUrl, ‘POST’, headers, contents, function(body, status, headers)

何か認識が間違っていることろがあれば、お教えください。

ぱっと見きになるのは、参照されているTipsにあるサンプルの例でもそうですが、cURLコマンドで -H を指定せずに -d を’{key:value}’ のテキスト形式で記載するリクエストのContent-Typeは application/x-www-form-urlencoded となりkintone.proxy()でリクエストする際には明示する必要がありますが、現状 application/json が指定されているので、記載されているcURLコマンドとkintone.proxy() のリクエストは等価になってないものと考えられます( application/x-www-form-urlencoded に変えて試してみると良いと思います)。

 

また、cURLとkintone.proxy() のリクエスト内容が等価になっているかを調べる方法として、この辺で触れているRequest.Binのようなサービスは非常に有用なので確認に使われると良いかと思います。

 

OAuth認可を行うサービスへのリクエストは kintone.proxy() だけでの実装は難しいことが殆どですが、Client Credential Grantであれば大丈夫かと思います。健闘をお祈りしています。

ご返事ありがとうございます!

application/x-www-form-urlencoded

こちらでも試しましたが、こちらの場合、invalid_clientと返ってきてしまいます。

RequestBin試してみます。
ありがとうございました。

多少マシになってる感じはしますが、要切分ですね。RequestBinでぜひ見比べてみてください。

解決できましたので、報告させていただきます。

postmanで確認しながら進めまして、

application/x-www-form-urlencoded

で正解でした。

invalid_clientと返ってくるのは、単純にBase64エンコードをencodeURI()でおこなっていると勘違いしており、変換されていない初歩的なミスでした。
大変お騒がせいたしました。