ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Security Developer Toolsリファレンス
11gリリース1 (11.1.1)
B61386-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 Oracle JSON Web Token

11gリリース1 (11.1.1)パッチ・セット5で導入されたOracle JSON Web Tokenでは、JSON Web Token (JWT)規格のサポートを提供します。

13.1 Oracle JSON Web Tokenの機能と利点

この項では、JWTの概念およびOracle JSON Web Tokenの主要な機能について説明します。

13.1.1 JWTについて

JSON Web Token (JWT)は、二者の間で転送されるクレームを表す手段です。JWTは、HTTP認可ヘッダーやURI問合せパラメータなど、領域が制限された環境向けのコンパクトなトークン・フォーマットです。

JWTにあるクレームは、base64urlでエンコードされていて0個以上の名前と値(名前は文字列で値は任意のJSON値)のペア(またはメンバー)で構成される、JSONオブジェクトとしてエンコードされます。各メンバーは、JWTによって表されるクレームです。

JSONオブジェクトは、JSON Web Signature (JWS)を使用してデジタル署名され、オプションで、JSON Web Encryption (JWE)を使用して暗号化されます。

JWTは、次の3つのセグメントを連結したもので表されます。

  • JWTヘッダー・セグメントは、トークンに適用される暗号化操作を指定します。

  • JWTクレーム・セグメントは、JWTに含まれるクレームをエンコードします。

  • JWT暗号セグメントには、トークンのコンテンツを保護する暗号化マテリアルが含まれます。

各セグメントは、ピリオド('.')文字で区切られます。3つのすべてのセグメントは、常にBase64urlでエンコードされた値になります。


関連項目:

JSON Web Token IETFのドラフト・ドキュメントは、http://tools.ietf.org/html/draft-jones-json-web-token-05にあります。

13.1.2 Oracle JSON Web Tokenの機能

Oracle JSON Web Tokenは、JWTトークンを幅広くサポートする完全なJavaソリューションです。次の機能があります。

  • Base64urlでエンコードされたトークンの構成、および、ユーザー定義のヘッダーなど、トークンのヘッダーとクレームのパラメータ値の設定

  • トークンの解析および検証

  • トークンの署名およびシリアライズ

oracle.security.jwt.JwtTokenクラスは、JSON Web Token (JWT)を表します。oracle.security.jwt.JwtTokenの代表的なメソッドは、次のとおりです。

  • setAlgorithm(String)、getAlgorithm()

  • signAndSerialize(PrivateKey)

  • serializeUnsigned()

  • setPrincipal(String)、getPrincipal()、getIssuer()などのクレーム・メソッド

詳細は、Javadocにある、ヘッダーとクレームのパラメータ名および対応するget/setメソッドの表を参照してください。

13.2 Oracle JSON Web Tokenの環境設定

Oracleセキュリティ開発ツールは、Oracle WebLogic ServerとともにORACLE_HOMEにインストールされます。この項では、Oracle JSON Web Tokenの環境を設定する方法について説明します。次の項目について説明します。

13.2.1 Oracle JSON Web Tokenのシステム要件

Oracle JSON Web Tokenを使用するには、システムにJava Development Kit (JDK)バージョン1.6以上が必要です。

13.2.2 CLASSPATH環境変数の設定

CLASSPATH環境変数には、必要なjarファイルおよびclassファイルすべてのフルパスとファイル名を指定してください。次の項目をCLASSPATHに指定します。

  • osdt_core.jarファイル

  • osdt_cert.jarファイル

  • jackson-core-1.1.1.jarファイル

  • jackson-mapper-1.1.1.jarファイル

実行時に、次の場所でJackson jarが検索されます。

  1. 存在する場合、jarはシステム・クラス・パスからロードされます。

  2. jarがシステム・クラス・パスに存在しない場合、システム・プロパティJackson.library.pathを調べます。存在する場合、jarはJava SEクライアントとJava EEクライアントの両方の場所からロードされます。

  3. システム・プロパティJackson.library.pathが設定されていないか、Jackson jarがそこに見つからない場合、事前定義済の場所$ORACLE_HOME/modules (Java EE環境の場合)および現在のディレクトリ(Java SEクライアントの場合)から取得されます。

13.2.2.1 WindowsでのCLASSPATHの設定

WindowsでCLASSPATHを設定する手順を次に示します。

  1. Windowsの「コントロール パネル」で「システム」を選択します。

  2. 「システムのプロパティ」ダイアログで「詳細設定」タブを選択します。

  3. 「環境変数」をクリックします。

  4. ユーザー環境変数のセクションで「新規」をクリックし、CLASSPATH環境変数をユーザー・プロファイルに追加します。CLASSPATH環境変数がすでに存在している場合は、選択して「編集」をクリックします。

  5. 必要なjarファイルおよびclassファイルすべてのフルパスとファイル名をCLASSPATHに追加します。

    たとえば、CLASSPATHは次のようになります。

    %CLASSPATH%;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_core.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_cert.jar;
    
  6. 「OK」をクリックします。

13.2.2.2 UNIXでのCLASSPATHの設定

UNIXでは、必要なjarファイルおよびclassファイルすべてのフルパスとファイル名を含むようにCLASSPATH環境変数を設定します。次に例を示します。

setenv CLASSPATH $CLASSPATH:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_core.jar:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_cert.jar:

13.3 コア・クラスとインタフェース

Oracle JSON Web Tokenは、oracle.security.restsec.jwt.JwtTokenクラスで構成されます。このクラスで提供される主要な機能は次のとおりです。

13.4項に、Oracle JSON Web Tokenの使用方法を示します。

13.4 使用例

この項では、Oracle JSON Web Tokenの使用例を説明します。


注意:

これらは、Oracle JSON Web Tokenの使用方法を示す具体例です。ここで説明したメソッドの使用の詳細およびその他のオプションについては、JWT javadoc (13.5項)を参照してください。

13.4.1 JWTトークンの作成

JWTトークンを作成するには、コンストラクタ・メソッドJwtToken()を使用して、JwtTokenオブジェクトの作成を開始します。

JwtToken jwtToken = new JwtToken(); 

様々なsetterメソッドを使用して、JWTトークンのパラメータ値を設定できます。

ヘッダー・パラメータの設定

ヘッダー・パラメータalgを設定する必要があります。setAlgorithm(String)メソッドを使用してこのパラメータを設定し、getAlgorithm()メソッドを使用してこのパラメータを取得します。デフォルトでは、algパラメータはnoneに設定されており、これはトークンに署名しないことを意味します。

setHeaderParameter(String, Object)メソッドを使用して、JWTヘッダー・セグメント内のユーザー定義のヘッダー・パラメータを設定します。

クレーム・パラメータの設定

Oracle JSON Web Tokenでは、クレーム・パラメータexp、iat、iss、aud、prnを設定するためのメソッドが用意されています。すべてのクレーム・パラメータはオプションです。

setClaimParameter(String, Object)メソッドを使用して、JWTクレーム・セグメント内のユーザー定義のクレーム・パラメータを設定します。

13.4.2 JWTトークンの署名

JWTトークンの作成および署名を行うには、まず、次のように、JwtTokenクラスのインスタンスを作成します。

JwtToken jwtToken = new JwtToken(String); 

次に、アルゴリズム、発行者、有効期限、その他のクレームなどのパラメータを次のように設定します。

jwtToken.setAlgorithm(JwtToken.SIGN_ALGORITHM.HS256.toString());
jwtToken.setType(JwtToken.JWT);
jwtToken.setIssuer("my.company.com");
jwtToken.setPrincipal("john.doe"); 

最後に、次のように、秘密鍵を取得して、秘密鍵を使用したトークンに署名します。

PrivateKey privateKey ;
String jwtString = jwtToken.signAndSerialize(privateKey);

13.4.3 JWTトークンの検証

次のコード例では、有効期限およびトークンの発行者を検証しています。

// Read the JWT token as a String from HTTP header
String jwtStr = "eyJ.eyJp.dB";
JwtToken token = new JwtToken(jwtStr);
 
// Validate the issued and expiry time stamp.
if (token.getExpiryTime().after(new Date())) {
...
...
}
 
// Get the issuer from the token
String issuer = token.getIssuer(); 

13.4.4 署名なしのJWTトークンのシリアライズ

JWTトークンにデジタル署名する必要がない場合、次の例に示すように、署名なしでトークンをシリアライズできます。

JwtToken jwtToken = new JwtToken();
jwtToken.setType(JwtToken.JWT);
jwtToken.setIssuer("my.oracle.com");
jwtToken.setPrincipal("john.doe");
String jwtString = jwtToken.serializeUnsigned();

13.5 Oracle JSON Web Tokenのリファレンス

Oracle JSON Web TokenのAPIリファレンス(Javadoc)は次のドキュメントで参照できます。

Oracle Fusion Middleware Oracle Security Developer Tools RESTセキュリティJava APIリファレンス