Access Token の取得について、Postmanからだと取得できるが、Javaからだと取得できない
##やりたいこと
LINEWORKSのBOTを動かしたいと考えており、リフレッシュトークンを用いたアクセストークンの更新を含めてJavaで実行させたいと考えております。
##困っていること
Java(Spring Framework)を用いてプログラム内でからPOST通信で「https://auth.worksmobile.com/oauth2/v2.0/token」を実行しようとしているのですが、400番台のエラーが発生してしまいます。Request Headers や Request Form Parameters に写し間違いが無いことは確認しています。以下、エラーの一部抜粋です。
--------------------------------------------------------
2022-04-20T09:28:57.584046+00:00 app[web.1]: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"error_description":"Grant type is not supported.","error":"unsupported_grant_type","error_uri":"See document on https://developers.worksmobile.com/reference/authorization-auth"}"
2022-04-20T09:28:57.584171+00:00 app[web.1]: at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:101)
--------------------------------------------------------
上記エラーに示されている 参照先URL と同じオプションの利用を行っております。
また、grant_type については refresh_token (固定) とされているので困っております。
こちらどのように対応したらよろしいのでしょうか。
##確認したこと
Postmanで同様のAPIを実行してみたところ、ステータスコード200が表示され、アクセストークンも正常に再発行できています。
また、Service Account認証 (JWT)はPostmanからAPIを実行してアクセストークンとリフレッシュトークンを発行しました。
原因についてなにかわかればご教授お願いいたします。
投稿に新しいコメントが追加されましたら通知を送信します。
コメント3
업데이트 된 답글입니다.
LINE WORKS 公式アカウント
実際に送受信されているhttp requestおよびresponse情報をご確認ください。
2022.04.21
업데이트 된 답글입니다.
kiino 投稿者
以下、実際に用いてるJAVAプログラムのAPI呼び出し部です。
// リクエストヘッダを作成
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
// 自作クラス AccessTokenRequest にアクセストークン再発行に必要なリクエストパラメータを格納
AccessTokenRequest accessTokenRequest = new AccessTokenRequest();
accessTokenRequest.setRefresh_token(refreshToken);
accessTokenRequest.setGrant_type("refresh_token");
accessTokenRequest.setClient_id(clientId);
accessTokenRequest.setClient_secret(clientSecret);
// リクエスト情報の作成
RequestEntity<String> entity = RequestEntity.post(URL_REISSUE_TOKEN)
.headers(headers)
.body(accessTokenRequest.toString());
try{
//リクエストの送信
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.exchange(entity, String.class); ←ここで400エラーが発生
・・・
}・・・
以下、自作したAccessTokenクラスの中身です。
import lombok.Data;
@Data
public class AccessTokenRequest {
private String refresh_token;
private String grant_type;
private String client_id;
private String client_secret;
}
同じ認証情報(リフレッシュトークン)を利用してpostmanで取得できているため、
http requestおよびresponse情報にミス等ありましたらご指摘お願いいたします。
2022.04.22
업데이트 된 답글입니다.
LINE WORKS 公式アカウント
恐らくはRequestEntityがAPI Http Request実行内容になるかと思いますが、詳細につきましてはspringframeworkの開発元にご確認ください。
また、パケットキャプチャなどの手段でHttp Requestの実行内容を確認することができます。ご参考ください。
なお、Postmanではサンプルコードが確認できるかと思いますので、そちらのご利用もご検討ください。
2022.04.25
まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。