JWT 認証

JSON Web Token (JWT) は、二者間の情報を JavaScript Object Notation (JSON) オブジェクトとして安全に転送するためのオープン標準です。JWT は認証および承認に用いられます。JWT では single sign-on (SSO) が有効化されるため、ユーザーがクラウド アプリケーションやウェブサイトにログオンする回数が最小限に抑えられます。

JWT の構造

JWT は、 ヘッダー、ペイロード、およびシグネチャーの 3 つの部分から構成されています。

ヘッダー

ヘッダーは通常、タイプ (typ)アルゴリズム (alg) の 2 つの部分からなります。アルゴリズムはシグネチャーを生成するために使用されます。

Example:  

{

"typ": "JWT",

"alg": "RS256"

}

RS256 は、このトークンの署名に RS256 - RSA シグネチャーと SHA256 が使用されることを表します。

ペイロード

ペイロードはクレームのデータ本体にあたる JSON オブジェクトをさします。クレームとはエンティティ (通常はユーザー) と付加的なメタデータに関するステートメントです。属性 email、または属性 domain および name が定義されていなければなりません。

Example:  

{

"email":"jde@company.com",

"exp": 1472034208

}

Example:  

{

"name":"jde",

"domain":"company",

"exp": 1472034208

}

シグネチャー

シグネチャーは JWT 差出人の ID を確認し、メッセージが改ざんされていないことを保証するために使用されます。シグネチャーとはエンコードされたヘッダーとペイロードのことで、秘密キーで署名されています。通常の場合、シグネチャーの生成と検証には X.509 証明書が使用されます。

認証はシグネチャーを確認することで行われます。シグネチャーが有効であれば、アクセスが許可されます。

対応する署名アルゴリズム

Qlik NPrinting は以下のシグネチャーに対応しています。

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

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

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

例: 署名付き JWT による Qlik NPrinting へのアクセス

署名付き JWT を使用してアクセスする手順を以下の例に示します。

  1. 一連のクレームを含む JWT が生成され、構成した証明書用の秘密キーで署名されます。

  2. HTTP 承認ヘッダーで、署名付き JWT を含めてクレームがプロキシに送信されます。

  3. プロキシは構成された属性マッピングを出力し、バックエンドサービスに呼び出しを転送します。

  4. クライアントはセッションを受信します。その後の呼び出しに JWT を含める必要はありません。

    1. 呼び出しに JWT が含まれている場合、その JWT は検証され、無効な場合はそのユーザーのアクセスが拒否されます。
    2. JWT に含まれるユーザーが、セッションのために保存されたユーザーと異なる場合、そのユーザーは新しいセッションを取得します。

標準のフィールド

Qlik NPrinting では JWT クレーム内の以下のフィールドが使用されます。

  • Expiration time (exp): JWT  が受領されなくなる時点までの有効期限を識別します。
  • Not before (nbf): JWT の受領開始時刻を識別します。
注: JWT トークン内で他のフィールドを構成してある場合でも、Qlik NPrinting では上記のフィールドしか認識されません。

制限

以下の制限があります。

  • 暗号化された JWT には対応していません。

  • 対応するのは以下の署名アルゴリズムのみです。

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

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

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