メイン コンテンツをスキップする 補完的コンテンツへスキップ

JWT 認証

JSON Web Token (JWT) は、JavaScript Object Notation (JSON) オブジェクトである 2 つの当事者間で情報を安全に送信するためのオープン標準です。JWT は主に認証と承認に使用されます。JWTsingle sign-on (SSO) を有効にし、ユーザーがクラウド アプリケーションや Web サイトにログインする必要がある回数を最小限に抑えます。

JWT 構造

JWT は、それぞれピリオド (.) で区切られた 3 つの部分で構成されます。

  • ヘッダー: 使用される署名アルゴリズムなど、トークンに関するメタデータが含まれます。

  • ペイロード: クレームまたはデータが含まれます。

  • 署名: トークンが改ざんされていないことを確認するための暗号署名。

JWT の形式は次のようになります。

header.payload.signature

例:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiam9obiIsImVtYWlsIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJyb2xlcyI6WyJ1c2VyIiwiYWRtaW4iXX0.8G1cGV2RnxL08XLMOprldCVjGeuPbLfBlax2ySHwdfJ5cRzT3T3ZOk9mCmzyIW0ewEvjYskpz3g-sSZOz3fg0BBEl5pgyKZZc20t5u2jyb0Gr_yNkwEZcn3Tf4lwFYTIyRG9j4Q9F9YlhkttFyPT_hHLOg0xpkEkwq-IWmjggZkWwnUt9XaYg4K9d9Mb3vQ4oVOozdrI-L8Xw5OwdPrhL-jlbttg50bNofIZG7zOuwWNVq3vHbZ1Xr04QIBJSRVlTzDELRoUDGdHMGqdjw9z3c21W3Tnsjxg1rrdFc0wsf56vHR6Q4RQFPy4hM7cBd4HDlIYhVZPYwhLBdyZn8ceWmF99jSQbODyUbA6rjhwJ9zvZd4nk0aJZxQd0oNwFyKMmrlb7WGzKdtKz2Y88SCf79gdXyznVdq7IYtFwYwJ9cnF2Qd5tmYw

JWT ヘッダー

ヘッダーはトークンのタイプと署名アルゴリズムを定義します。通常、次の項目が含まれます。

  • typ: トークンが JWT であることを指定します。

  • alg: 署名アルゴリズム (例: RS256)。

ヘッダーの例:

{
  "typ" header: "JWT",
  "alg": "RS256"
}

サポートされている署名アルゴリズム

次の署名アルゴリズムがサポートされています。

  • RS256 - RSA シグネチャーと SHA256

  • RS384 - RSA シグネチャーと SHA384

  • RS512 - RSA シグネチャーと SHA512

これらのアルゴリズムは、JWT の署名および検証に使用され、トークンが改ざんされていないことを確認します。

JWT ペイロード

ペイロードは、ユーザーに関するクレームと関連するメタデータが含まれる JSON オブジェクトです。クレームには次のようなものが含まれます。

  • ユーザー情報 (例: ユーザー ID、名前、メール)

  • ユーザー ロールと権限

  • 有効期限情報

ペイロードの例:

{
  "userid": "jde",
  "userdirectory": "qsefw",
  "name": "John Doe",
  "email": "jde@example.com",
  "groups": ["Administrators", "Sales", "Marketing"],
  "exp": 1635355629
}

JWT クレームの標準項目

JWT クレーム内では次の項目を使用できます。

  • Issuer (iss): トークンの発行者を識別します。
  • Subject (sub): トークンの件名を識別します。
  • Audience (aud): トークンのオーディエンスを識別します。
  • Expiration time (exp): トークンの有効期限を定義します。
  • Not before (nbf): トークンの有効期間の開始日時を定義します。
  • Issued at (iat): トークンが発行された日時を定義します。
  • JWT ID (jti): トークンの一意な識別子です。

JWT 署名

署名によりトークンの整合性が保証され、送信者の ID が検証されます。ヘッダーとペイロードをエンコードし、秘密キーで署名することで作成されます。

JWT で認証するには、署名が検証されます。署名が有効な場合、Qlik Sense に対してアクセスが許可されます。

X.509 証明書は通常、署名の生成と検証に使用されます。QMC の仮想プロキシ設定では、証明書 (公開キーを含む) が署名を検証するように構成されています。

JWT に署名するための公開キー/秘密キーのペアの作成

JWT に署名するための公開キー/秘密キーのペアを生成するには、OpenSSL を使用できます。次のコマンドを実行します。

openssl genrsa -out privatekey.pem 4096
openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 1825
  • 秘密キーは JWT に署名するために使用されます。安全に保管してください。

  • 公開キーは検証に使用されます。

情報メモOpenSSL がインストールされていない場合は、Win32/Win64 OpenSSL インストール プロジェクトからダウンロードしてインストールしてください。

JWT 認証の構成 (仮想プロキシの設定)

Qlik Sense Enterprise on Windows で仮想プロキシの JWT 認証を構成するには、次の手順に従います。

  1. Qlik 管理コンソール (QMC) にログインします。

    • ブラウザを開き、https://<server_hostname>/qmc にアクセスします。

  2. 新しい仮想プロキシを作成します。

    • [システムの構成] > [仮想プロキシ] に移動します。

    • [Create new] (新規作成)をクリックします。

  3. 識別設定を構成します。

    • 右側のメニューで [識別] を選択します。

      仮想プロキシ識別設定。

      識別設定。
    • 一意の説明、プレフィックス、セッション クッキー ヘッダー名を入力します。

      • 例: [説明] と [プレフィックス] に「jwt」と入力し、これをセッション クッキー ヘッダー名に追加します。

      • 仮想プロキシはプレフィックスやセッション クッキーを共有できないため、Qlik Sense インスタンス内で 3 つの値すべてが一意であることを確認してください。

  4. 認証設定を構成します。

    • 右側のメニューで [認証] を選択します。

      仮想プロキシ認証設定。

      認証設定。
    • 次の値を設定します。

      • 匿名アクセスモード: 匿名ユーザーなし

      • 認証方法: JWT

    • 追加の設定:

      • JWT 証明書: 公開キー ファイルの内容全体をコピーして貼り付けます。

      • UserID の JWT 属性: ユーザー ID を取得するために使用されるキー。

      • UserDirectory の JWT 属性: ユーザー ディレクトリを取得するために使用されるキー。

      • 対象オーディエンス: JWT のオーディエンス (aud) と一致する必要があります。

    情報メモ

    JWT の属性を Qlik Sense 属性にマッピングすることが可能です。詳細については、「仮想プロキシの作成」を参照してください。

  5. 負荷分散の構成:

    • 右側のメニューで [負荷分散] を選択します。

      仮想プロキシの負荷分散設定。

      負荷分散設定。
    • 負荷分散ノード (セントラル ノードなど) を選択します。

  6. 詳細設定の構成:

    • [詳細] をクリックします。

      仮想プロキシの詳細設定。

      詳細設定。
    • [Secure 属性あり] をクリアし、 [SameSite 属性] を [属性なし] に設定します。

      情報メモ

      このステップはテストのみを目的としています。本番環境で構成が安全であることを確認します。Secure 属性と SameSite 属性の詳細については、「仮想プロキシの編集」を参照してください。

  7. ホスト許可リストを更新します。

    • [詳細設定] セクションで、 [ホスト許可リスト] を見つけます。

      仮想プロキシ ホスト許可リスト設定。

      ホスト許可リスト設定。
    • ドメインまたは IP アドレス (マシン名ではなく) 経由で Qlik Sense サーバーにアクセスする場合は、それを許可リストに追加します。

      • 例: IP アドレス経由で接続する場合は、その IP を許可リストに追加します。

  8. 変更を適用し、プロキシをリンクします。

    • [適用] をクリックします。

    • 右側のメニューで [プロキシ] を選択します。

      仮想プロキシに関連するプロキシ設定。

      関連するプロキシ設定。
    • 仮想プロキシを既存のプロキシ (中央プロキシなど) に関連付けるには、 [リンク] をクリックします。

JWT の生成と使用

JWT を生成するには、token.js スクリプトを作成します。このスクリプトは、jsonwebtoken ライブラリと秘密キーを使用してトークンを生成します。生成されたら、JWT をコピーし、API リクエストにベアラー トークンとして含めます。

token.js ファイルの構造

token.js ファイルは次を定義します。

  • ユーザーの詳細とクレームを含むペイロード。

  • アルゴリズム、有効期限、オーディエンスなどの署名オプション。

  • トークンに安全に署名するための秘密キー。

依存関係

jsonwebtoken および fs (ファイル システム) モジュールが必要になります。

const jsonWebToken = require('jsonwebtoken');
const fs = require('fs');
  • jsonwebtoken は JWT の作成に使用されます。

  • fs は、JWT に署名するための秘密鍵 (.pem ファイルとして保存) を読み取るために使用される組み込みの Node.js モジュールです。

情報メモjsonwebtoken をまだインストールしていない場合は、npm install jsonwebtoken を実行してください。

秘密キーの読み取り

JWT に署名するには、秘密鍵 (.pem ファイル) へのパスを指定する必要があります。

const jwtEncryptionKey = fs.readFileSync('<path to the private key pem file>');
  • '<path to the private key pem file>' を秘密キーへの実際のファイル パスに置き換えます。

署名オプションの定義

署名オプションは、JWT の署名方法を定義します。ほとんどの場合、アルゴリズムとして RS256 を使用し、有効期限やオーディエンスなどの他のパラメーターを定義します。これらが IdP 構成と一致していることを確認してください。

署名オプションの例:

const signingOptions = {
  algorithm: 'RS256',   // The algorithm used to sign the token
  expiresIn: '365d',    // Token expires in 365 days
  audience: 'example-audience',  // The audience
};

ペイロードの作成

ペイロードには、JWT にエンコードされるクレームまたはユーザー データが含まれます。これには、useridemailgroups などのユーザー情報が含まれる場合があります。

ペイロードの例:

const payload = {
  userid: 'jde',               // Unique identifier for the user
  userdirectory: 'qsefw',        // Directory the user belongs to
  name: 'John.Doe',        // User's full name
  email: 'jde@example.com',    // User's email address
  groups: ['Administrators', 'Sales', 'Marketing'], // User's roles/groups
};

JWT への署名

jsonwebtoken ライブラリを使用して、秘密キーと指定されたオプションでペイロードに署名し、JWT を作成します。

const token = jsonWebToken.sign(payload, jwtEncryptionKey, signingOptions);
console.log(token);
  • jsonWebToken.sign() は署名された JWT を生成し、それがコンソールに出力されます。

token.js コードの例

const jsonWebToken = require('jsonwebtoken');
const fs = require('fs');

// This is the private key to encrypt the JWT. This example uses certificates
// generated by the Qlik Sense Enterprise on Windows server.
// Replace with the actual path to your private key
const jwtEncryptionKey = fs.readFileSync('/path/to/your/private-key.pem');

// Signing options (ensure these match your IdP configuration)
const signingOptions = {
  algorithm: 'RS256',
  expiresIn: '365d',
  audience: 'example-audience',
};

// Example payload with user information
const payload = {
  userid: 'jde',
  userdirectory: 'qsefw',
  name: 'John.Doe',
  email: 'jde@example.com',
  groups: ['Administrators', 'Sales', 'Marketing'],
};

// Create the token
const token = jsonWebToken.sign(payload, jwtEncryptionKey, signingOptions);

// Output the signed JWT to the console
console.log(token);

JWT の生成

JWT を生成するには、次の token.js スクリプトを実行します。

  1. ターミナルを開き、token.js があるディレクトリに移動します。

  2. 次のようにスクリプトを実行します。

    node token.js
    

署名された JWT はコンソール ウィンドウに表示され、Qlik Sense Enterprise on Windows にアクセスするためのベアラー トークンとして使用できます。

JWT をベアラー トークンとして使用する

生成された JWT をベアラー トークンとして使用するには、ターミナルから JWT 出力をコピーし、それを HTTP リクエストの Authorization ヘッダーに含めます。

例:

## Bearer token
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOiJoYXJyeSIsInVzZXJkaXJlY3RvcnkiOiJxc2VmdyIsIm5hbWUiOiJIYXJkY29yZSBIYXJyeSIsImVtYWlsIjoiaGFycnlAZXhhbXBsZS5jb20iLCJncm91cHMiOlsiQWRtaW5zdHJhdG9ycyIsIlNhbGVzIiwiTWFya2V0aW5nIl0sImlhdCI6MTYwMzgxOTYyOSwiZXhwIjoxNjM1MzU1NjI5LCJhdWQiOiIxMTJhZGFtcyJ9.gDWFqJ8fZbo9QpF52CnlhKCMsHal2AcobIVwhVCpnbLfpmc-Z_k4uUWGh2TxaSucjQ5-k5I9s9sNgIPskqaVQN2JanFXxIJKRFow9LbuSbImZs74RsQ6TqsoJTu7_5eKLv2VRAqoh6Tqabl5vma1JdhHbsTKGixt8yGZI7Q2QNjObQq8hAh6VveNWcUVkB60LEMOPiipij7VTKQ7IQg-rG4XA8xgYxbOb6i3Q6miY4kGSGujbsjtYLevEJQlEZtij2JMMDeH_nwH2MWhWhOBL1TpAAUKkCOxPFDjGacxGvkObAOFjL-Ztx0LdVwF2BXxVerQ1xKyl0YpLErS4d576Q

例: 署名された JWTQlik Sense にアクセスする

JWT が構成され、プロキシが設定されると、クライアントは署名された JWT を使用して認証できるようになります。プロセスは次のように機能します。

クライアントは、署名された JWT を HTTP ヘッダー内の Authorization: ベアラー値として使用してプロキシに接続します。

  1. JWT が生成され、秘密キーで署名されます。

  2. クライアントは、HTTP Authorization ヘッダーに JWT を含めてプロキシにリクエストを送信します。

  3. プロキシは、設定された公開キーを使用して JWT 署名を検証します。

  4. プロキシは Qlik Sense ヘッダーを挿入し、リクエストをバックエンド サービスに転送します。

  5. クライアントはセッションを受信し、JWT なしでさらにリクエストを実行できます。

    • JWT 内のユーザーが現在のセッションに関連付けられているユーザーと異なる場合、そのユーザーに対して新しいセッションが作成されます。

    • 無効な JWT が送信された場合、アクセスは拒否されます。

制限事項

  • 暗号化された JWT はサポートされていません。

    情報メモHTTPS を使用する場合、JWT を含むすべてのトラフィックは転送中に暗号化されます。
  • 以下の署名アルゴリズムのみサポートしています。

    • RS256 - RSA シグネチャーと SHA256

    • RS384 - RSA シグネチャーと SHA384

    • RS512 - RSA シグネチャーと SHA512

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。