Skip to main content

Java での JWT 署名

この記事では、Java コードを使用して JSON Web Token (JWT) に署名する方法を説明します。便宜上、JWT トークンの値のみを指定するテンプレートをご用意しています。また、jwt.io コードを使用して JWT に署名することもできます。

開始する前に

JWT 署名を完了するには、以下の情報が必要です。

  • アルゴリズムタイプ

  • ペイロードのクレーム

  • STM APIキー

  • クライアント証明書のファイルパス

  • クライアント証明書のパスワード

  • Configure your credentials

  • STM ホスト

    1. Host options

    Country

    Host type

    SM_HOST value

    United States of America (USA)

    Demo

    https://clientauth.demo.one.digicert.com

    Production

    https://clientauth.one.digicert.com

    Switzerland (CH)

    Demo

    https://clientauth.demo.one.ch.digicert.com

    Production

    https://clientauth.one.ch.digicert.com

    Japan (JP)

    Demo

    https://clientauth.demo.one.digicert.co.jp

    Production

    https://clientauth.one.digicert.co.jp

    Netherlands (NL)

    Demo

    https://clientauth.demo.one.nl.digicert.com

    Production

    https://clientauth.one.nl.digicert.com


始める

  1. jwtsigning.zip ファイルをダウンロードします。

  2. ファイルを右クリックし、すべてを展開…を選択します。

  3. JWTsigning > src > メイン > java を開きます

  4. プレーンテキストエディタまたは統合開発環境(IDE)で JwtCreateHeader.java を開きます。

    1. 以下で望ましいアルゴリズムを見つけて指定します。

      headerMap.put("alg", "< insert algorithm>");
    2. JwtCreateHeader.java ファイルを保存します。

  5. プレーンテキストエディタまたは統合開発環境(IDE)で、JwtCreatePayload.java を開きます。

    1. 必要なペイロードクレームを見つけ、編集して追加します。

      payloadMap.put("<insert claim>", "<insert value>");
    2. JwtCreatePayload.java ファイルを保存します。

JWT 署名

  1. コマンドプロンプトを開く。

  2. DigiCert​​®​​ Software Trust Managerに接続するための環境変数を設定します。

    SM_HOST:<Prod host or demo host>
    SM_API_KEY:<API key>
    SM_CLIENT_CERT_PASSWORD:<client certificate password>
    SM_CLIENT_CERT_FILE:<client certificate secure file path>
  3. JWTsigning フォルダのファイルパスを入力します。

    C:\Users\Name\Downloads\JWTsigning
  4. 実行する:

    mvnw clean install
  5. 以下のコマンドを編集して実行します。

    java -jar target/JWTsigning-1.0-SNAPSHOT <keypair alias> <algorithm>

FAQ

ヘッダーとは?

ヘッダ内の暗号操作により、JWTが署名されるか署名されていないか、また暗号化されているか、されている場合はどのようなアルゴリズムで暗号化されているかが定義されます。が署名されるか署名されていないか、また暗号化されているか、されている場合はどのようなアルゴリズムで暗号化されているかが定義されます。

headerMap.put("alg", "RS256");

ペイロードとは?

ペイロードには、一般的にユーザー情報が含まれます。ペイロードにクレームを追加する必要はありませんが、いくつでも追加できます。

payloadMap.put("sub", "1234567890");
payloadMap.put("name", "John Doe");
payloadMap.put("admin", "true");
payloadMap.put("iat", 1516239022);

Base64 と Base64URL の主な違いとは?

Base64には +、/、= という文字が含まれていますが、これらは一部のファイルシステム名やURLで用意された意味があります。Base64URlは、+ を - に、/ を _ に置き換えることでこれを解決しています。末尾のパディング文字 = は、不要な場合には削除することができます。