Access Token の取得について、Postmanからだと取得できるが、Javaからだと取得できない - API 2.0 - LINE WORKS Developers : コミュニティ

Access Token の取得について、Postmanからだと取得できるが、Javaからだと取得できない

kiino

2022.04.20既読 191

##やりたいこと

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 公式アカウント

    同じ認証情報を利用してpostmanで取得できるのであればJAVAプログラム内での処理内容に問題がある可能性があります。
    実際に送受信されているhttp requestおよびresponse情報をご確認ください。

    2022.04.21

    0
  • 업데이트 된 답글입니다.

    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

    0
  • 업데이트 된 답글입니다.

    LINE WORKS 公式アカウント

    ご利用のJavaプログラムではrestTemplate.exchange()でAPI Http Requestを行っているかと思います。
    恐らくはRequestEntityがAPI Http Request実行内容になるかと思いますが、詳細につきましてはspringframeworkの開発元にご確認ください。
    また、パケットキャプチャなどの手段でHttp Requestの実行内容を確認することができます。ご参考ください。

    なお、Postmanではサンプルコードが確認できるかと思いますので、そちらのご利用もご検討ください。

    2022.04.25

    0
前の投稿 フレキシブルテンプレートがWebブラウザ上で「!表示できないトークです」と表示される
次の投稿​​Bot を含むトークルーム作成