jawa-jwtを用いたJWTによるアクセストークン取得ができない【Service Account認証】

kiino

2022.05.18既読 1351

## やりたいこと
## 問題のコード
以下、jawa-jwtを参考に作成したコードです。
```Java
//秘密鍵の設定 String privateKey = {"-----BEGIN PRIVATE KEY-----" と改行、"-----END PRIVATE KEY-----" を除去した秘密鍵}; //ヘッダーの設定 Map<String, Object> headerClaims = new HashMap(); //ヘッダーのalg と typ は自動で付与されるため何も書かない //ペイロードの設定 Map<String, Object> payloadClaims = new HashMap<>(); payloadClaims.put("iss", "Client ID"); payloadClaims.put("sub", "Service Account"); payloadClaims.put("iat", "JWT生成日時"); payloadClaims.put("exp", "JWT満了日時"); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); byte[] keyContentAsBytes = Base64.getDecoder().decode(privateKey); PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(keyContentAsBytes) //RSA256を用いた電子署名 try { RSAPrivateKey privKey = (RSAPrivateKey)keyFactory.generatePrivate(privSpec); Algorithm algorithm = Algorithm.RSA256(null, privKey); String token = JWT.create()    .withHeader(headerClaims)    .withPayload(payloadClaims) .sign(algorithm); System.out.println("JWT = " + token ); } catch (JWTCreationException exception){ //Invalid Signing configuration / Couldn't convert Claims. }
```
これを実行すると、正常に動作してJWTが生成されるのですが、Postmanを用いてアクセストークン発行URLの実行を試みると「500 Internal Server Error」が発生してしまいます。おそらくLINEWORKS用のJWTが正常に生成されていないのだと思われます。
どこが間違っているのか、確認をお願いできないでしょうか。
一応、ヘッダーとペイロード情報はJWT.create()で正常にBASE64エンコードできたことは確認済みです。

コメント1

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

    kiino 投稿者

    自己解決しました。
    原因は一番初めの 「privateKey に指定していた秘密鍵が最新のものではない」ことが原因でした。

    privateKey を最新の状態にして生成したJWTを用いれば正常にアクセストークンの取得ができることを確認しました(添付画像追加)。
    上のコードを貼り付ければJava上でJWTが取得できるので情報共有として残します。

    2022.05.19

    1
前の投稿 設備情報が削除できなくなりました
次の投稿clients/partners issue
リスト

まだ、解決できませんか?
今すぐ実際に使用しているLINE WORKSユーザーに質問してみましょう。