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

戻る
戻る
 
次へ
次へ
 

9 Oracle SAML

この章では、Oracle SAML(Security Assertions Markup Language)のSoftware Development Kit(SDK)の使用について説明します。Java開発者は、Oracle SAMLを使用して、SAML 1.0/1.1およびSAML 2.0仕様に準拠する、クロスドメイン・シングル・サインオンおよびフェデレーテッド・アクセス制御を実装したソリューションを開発できます。

この章に含まれる内容は次のとおりです。


関連項目:

Oracle Fusion Middleware 11gの更新の詳細は、「Oracle SAMLの変更点」の項を参照してください。

9.1 Oracle SAMLの機能と利点

Oracle SAML SDKでは、SAML準拠のJavaセキュリティ・サービスの開発を支援する、サポート・ツール、ドキュメントおよびサンプル・プログラムを含むJava APIが提供されます。Oracle SAMLは、アプレット、アプリケーション、EJB、サーブレット、JSPなどの既存のJavaソリューションに統合できます。

Oracle SAMLでは次の機能が提供されます。


関連項目:

これらの仕様や関連ドキュメントの詳細およびリンクは、付録A「リファレンス」を参照してください。

9.2 Oracle SAML 1.0/1.1

この項では、Oracle SAML 1.0/1.1の環境の設定方法、Oracle SAML 1.0/1.1の使用方法、およびOracle SAML 1.0/1.1ツールキットのクラスとインタフェースについて説明します。この項に含まれる内容は次のとおりです。

9.2.1 Oracle SAML 1.0/1.1のパッケージ

Oracle SAMLのJava APIには、SAML 1.0/1.1準拠のJavaアプリケーションを開発するために次のパッケージが含まれます。

oracle.security.xmlsec.saml

このパッケージには、SAMLアサーションをサポートするクラスが含まれます。

oracle.security.xmlsec.samlp

このパッケージには、SAMLのリクエストおよびレスポンスのプロトコル(SAMLP)をサポートするクラスが含まれます。

9.2.2 Oracle SAML 1.0/1.1の環境設定

Oracleセキュリティ開発ツールは、Oracle Application ServerとともにORACLE_HOMEにインストールされます。

この項では、Oracle SAML 1.0/1.1を使用するための環境設定について説明します。この項に含まれる内容は次のとおりです。

9.2.2.1 Oracle SAML 1.0/1.1のシステム要件

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

9.2.2.2 CLASSPATH環境変数の設定

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

  • osdt_core.jar

  • osdt_cert.jar

  • osdt_xmlsec.jar

  • osdt_saml.jar

  • org.jaxen_1.1.1.jarファイル(Oracle XML Securityディストリビューションに含まれるJaxen XPathエンジン)

9.2.2.2.1 WindowsでのCLASSPATHの設定

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

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

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

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

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

  5. 必要なjarファイルすべてのフルパスとファイル名を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;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_xmlsec.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_saml.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_saml2.jar;
    %ORACLE_HOME%\modules\org.jaxen_1.1.1.jar;
    
  6. 「OK」をクリックします。

9.2.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:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_xmlsec.jar:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_saml.jar:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_saml2.jar:
$ORACLE_HOME/modules/org.jaxen_1.1.1.jar

9.2.3 クラスとインタフェース

この項では、Oracle SAML 1.0/1.1のクラスとインタフェースの使用について説明し、コード例を示します。この項に含まれる内容は次のとおりです。

9.2.3.1 コア・クラス

この項では、SAMLおよびSAMLP 1.0/1.1のコア・クラスの概要をコード例と一緒に説明します。

コア・クラスを次に示します。

9.2.3.1.1 oracle.security.xmlsec.saml.SAMLInitializerクラス

このクラスはOracle SAMLのツールキットを初期化します。デフォルトでは、Oracle SAMLはSAML v1.0に対応するように初期化されます。特定のバージョンのSAML仕様に合せてOracle SAMLを初期化することもできます。特定のバージョンに対してinitializeメソッドをコールしても、以前に初期化されたバージョンはそのままになります。例9-1に、SAMLのツールキットをSAML v1.0とSAML v1.1に対して初期化する方法を示します。

例9-1 Oracle SAMLのツールキットの初期化

// initializes for SAML v1.1
SAMLInitializer.initialize(1, 1); 
// initializes for SAML v1.0, done by default
SAMLInitializer.initialize(1, 0); 
9.2.3.1.2 oracle.security.xmlsec.saml.Assertionクラス

このクラスは、SAMLアサーション・スキーマのAssertion要素を表します。

例9-2に、新しいAssertion要素を作成して既存のXML文書に追加する方法を示します。

例9-2 Assertion要素の作成とXML文書への追加

Document doc = Instance of org.w3c.dom.Document;
Assertion assertion = new Assertion(doc);
doc.getDocumentElement().appendChild(assertion);

例9-3に、Assertion要素をXML文書から取得する方法を示します。

例9-3 XML文書からのAssertion要素の取得

Document doc = Instance of org.w3c.dom.Document;

// Get a list of all Assertion elements in the document

NodeList assrtList = 
    doc.getElementsByTagNameNS(SAMLURI.ns_saml, "Assertion");
if (assrtList.getLength() == 0)
    System.err.println("No Assertion elements found.");

// Convert each org.w3c.dom.Node object to a 
// oracle.security.xmlsec.saml.Assertion object and process

for (int s = 0, n = assrtList.getLength(); s < n; ++s)
{
    Assertion assertion = new Assertion((Element)assrtList.item(s));
    // Process Assertion element
    ...
}
9.2.3.1.3 oracle.security.xmlsec.samlp.Requestクラス

このクラスは、SAMLプロトコル・スキーマのRequest要素を表します。

例9-4に、新しいRequest要素を作成して既存のXML文書に追加する方法を示します。

例9-4 Request要素の作成とXML文書への追加

Document doc = Instance of org.w3c.dom.Document;
Request request = new Request(doc);
doc.getDocumentElement().appendChild(request);

例9-5に、Request要素を既存のXML文書から取得する方法を示します。

例9-5 XML文書からのRequest要素の取得

Document doc = Instance of org.w3c.dom.Document;

// Get a list of all Request elements in the document

NodeList reqList = 
    doc.getElementsByTagNameNS(SAMLURI.ns_samlp, "Request");
if (reqList.getLength() == 0)
    System.err.println("No Request elements found.");

// Convert each org.w3c.dom.Node object to a 
// oracle.security.xmlsec.samlp.Request object and process

for (int s = 0, n = reqList.getLength(); s < n; ++s)
{
    Request request = new Request((Element)reqList.item(s));
    // Process Request element
    ...
}
9.2.3.1.4 oracle.security.xmlsec.samlp.Responseクラス

このクラスは、SAMLプロトコル・スキーマのResponse要素を表します。

例9-6に、Response要素を作成して既存のXML文書に追加する方法を示します。

例9-6 Response要素の作成とXML文書への追加

Document doc = Instance of org.w3c.dom.Document;
Response response = new Response(doc);
doc.getDocumentElement().appendChild(response);

例9-7に、Response要素を既存のXML文書から取得する方法を示します。

例9-7 XML文書からのResponse要素の取得

Document doc = Instance of org.w3c.dom.Document;

// Get a list of all Response elements in the document

NodeList respList = 
    doc.getElementsByTagNameNS(SAMLURI.ns_samlp, "Response");
if (respList.getLength() == 0)
    System.err.println("No Response elements found.");

// Convert each org.w3c.dom.Node object to a 
// oracle.security.xmlsec.samlp.Response object and process

for (int s = 0, n = respList.getLength(); s < n; ++s)
{
    Response response = new Response((Element)respList.item(s));
    // Process Response element
    ...
}

9.2.3.2 サポート・クラスとインタフェース

この項では、Oracle SAML 1.0/1.1のサポート・クラスとインタフェースの概要を説明します。

9.2.3.2.1 oracle.security.xmlsec.saml.SAMLURIインタフェース

このインタフェースは、アルゴリズム、ネームスペースおよびオブジェクトのURI文字列定数を定義します。次のネーミング規則が使用されます。

  • SAML 1.0仕様に定義されているアクションのネームスペースURIは、action_で始まります。

  • SAML 1.0仕様に定義されている認証メソッドのネームスペースURIは、authentication_method_で始まります。

  • SAML 1.0仕様に定義されている確認メソッドのネームスペースURIは、confirmation_method_で始まります。

  • ネームスペースURIはns_で始まります。

9.2.3.2.2 oracle.security.xmlsec.saml.SAMLMessageクラス

このクラスは、すべてのSAMLおよびSAML拡張メッセージのベース・クラスです。署名することができ、XML-DSIG(デジタル署名)構造体を含むことが可能です。

9.2.4 Oracle SAML 1.0/1.1のJava APIリファレンス

Oracle SAML 1.0/1.1のJava APIリファレンス(Javadoc)は、次のドキュメントで参照できます。

Oracle Fusion Middleware SAML 1.0/1.1 Java API Reference for Oracle Security Developer Tools

9.2.5 サンプル・プログラム

Oracleセキュリティ開発ツールを使用したサンプル・プログラムについては、Oracle Technology Network Webサイト(http://www.oracle.com/technology/sample_code/products/id_mgmt/index.html)を参照してください。

9.3 Oracle SAML 2.0

この項では、Oracle SAML 2.0の環境の設定方法、Oracle SAML 2.0の使用方法、およびOracle SAML 2.0ツールキットのクラスとインタフェースについて説明します。この項に含まれる内容は次のとおりです。

9.3.1 Oracle SAML 2.0のパッケージ

Oracle SAMLのJava APIには、SAML 2.0準拠のJavaアプリケーションを開発するために次のパッケージが含まれます。

oracle.security.xmlsec.saml2.core

このパッケージには、SAMLアサーションをサポートするクラスが含まれます。

oracle.security.xmlsec.saml2.protocol

このパッケージには、SAMLのリクエストおよびレスポンスのプロトコル(SAMLP)をサポートするクラスが含まれます。

oracle.security.xmlsec.saml2.ac

このパッケージには、SAML認証コンテキストの基本タイプをサポートするクラスが含まれます。

oracle.security.xmlsec.saml2.ac.classes

このパッケージには、SAML認証コンテキストの各種クラスをサポートするクラスが含まれます。

oracle.security.xmlsec.saml2.metadata

このパッケージには、SAMLメタデータをサポートするクラスが含まれます。

oracle.security.xmlsec.saml2.profiles.attributes

このパッケージには、各種のSAML属性プロファイルをサポートするクラスが含まれます。

oracle.security.xmlsec.saml2.profiles.sso.ecp

このパッケージには、SAML ECP SSOプロファイルをサポートするクラスが含まれます。

9.3.2 Oracle SAML 2.0の環境設定

Oracleセキュリティ開発ツールは、Oracle Application ServerとともにORACLE_HOMEにインストールされます。

この項では、Oracle SAML 2.0を使用するための環境設定について説明します。この項に含まれる内容は次のとおりです。

9.3.2.1 Oracle SAML 2.0のシステム要件

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

9.3.2.2 CLASSPATH環境変数の設定

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

  • osdt_core.jar

  • osdt_cert.jar

  • osdt_xmlsec.jar

  • osdt_saml.jar

  • org.jaxen_1.1.1.jarファイル(Oracle XML Securityディストリビューションに含まれるJaxen XPathエンジン)

9.3.2.2.1 WindowsでのCLASSPATHの設定

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

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

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

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

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

  5. 必要なjarファイルすべてのフルパスとファイル名を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;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_xmlsec.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_saml.jar;
    %ORACLE_HOME%\modules\oracle.osdt_11.1.1\osdt_saml2.jar;
    %ORACLE_HOME%\modules\org.jaxen_1.1.1.jar;
    
  6. 「OK」をクリックします。

9.3.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:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_xmlsec.jar:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_saml.jar:
$ORACLE_HOME/modules/oracle.osdt_11.1.1/osdt_saml2.jar:
$ORACLE_HOME/modules/org.jaxen_1.1.1.jar

9.3.3 クラスとインタフェース

この項では、Oracle SAML 2.0のクラスとインタフェースの使用について説明し、コード例を示します。次の項目について説明します。

9.3.3.1 コア・クラス

この項では、SAMLおよびSAMLPのコア・クラスの概要をコード例と一緒に説明します。コア・クラスを次に示します。

9.3.3.1.1 oracle.security.xmlsec.saml2.core.Assertionクラス

このクラスは、SAMLアサーション・スキーマのAssertion要素を表します。

例9-8に、新しいAssertion要素を作成して既存のXML文書に追加する方法を示します。

例9-8 Assertion要素の作成とXML文書への追加

Document doc = Instance of org.w3c.dom.Document;
Assertion assertion = new Assertion(doc);
doc.getDocumentElement().appendChild(assertion);

例9-9に、Assertion要素をXML文書から取得する方法を示します。

例9-9 XML文書からのAssertion要素の取得

// Get a list of all Assertion elements in the document
 
NodeList assrtList = 
    doc.getElementsByTagNameNS(SAML2URI.ns_saml, "Assertion");
if (assrtList.getLength() == 0)
    System.err.println("No Assertion elements found.");
 
// Convert each org.w3c.dom.Node object to a 
// oracle.security.xmlsec.saml2.core.Assertion object and process
 
for (int s = 0, n = assrtList.getLength(); s < n; ++s)
{
    Assertion assertion = new Assertion((Element)assrtList.item(s));
    // Process Assertion element
    ...
}
9.3.3.1.2 oracle.security.xmlsec.saml2.protocol.AuthnRequestクラス

このクラスは、SAMLプロトコル・スキーマのAuthnRequest要素を表します。

例9-10に、新しいAuthnRequest要素を作成して既存のXML文書に追加する方法を示します。

例9-10 AuthnRequest要素の作成とXML文書への追加

Document doc = Instance of org.w3c.dom.Document;
AuthnRequest request = new AuthnRequest(doc);
doc.getDocumentElement().appendChild(response);

例9-11に、AuthnRequest要素を既存のXML文書から取得する方法を示します。

例9-11 XML文書からのAuthnRequest要素の取得

Document doc = Instance of org.w3c.dom.Document;

// Get a list of all AuthnRequest elements in the document
 
NodeList reqList = 
    doc.getElementsByTagNameNS(SAML2URI.ns_samlp, "AuthnRequest");
if (reqList.getLength() == 0)
    System.err.println("No Request elements found.");
 
// Convert each org.w3c.dom.Node object to a 
// oracle.security.xmlsec.saml2.protocol.AuthnRequest 
// object and process
 
for (int s = 0, n = reqList.getLength(); s < n; ++s)
{
    AuthnRequest request = new AuthnRequest((Element)reqList.item(s));
    // Process Request element
    ...
}
9.3.3.1.3 oracle.security.xmlsec.saml2.protocol.StatusResponseTypeクラス

このクラスは、SAMLプロトコル・スキーマのResponse要素を表します。

samlp:StatusResponseType要素は、SAML 2.0プロトコルの拡張ポイントを表すベース型です。SAML 2.0仕様で定義される各種のプロトコルでは、samlp:Responsesamlp:LogoutResponseなどのサブタイプを使用します。

例9-12に、Response要素を作成して既存のXML文書に追加する方法を示します。

例9-12 Response要素の作成とXML文書への追加

Document doc = Instance of org.w3c.dom.Document;
Response response = new Response(doc);
doc.getDocumentElement().appendChild(response);

例9-13に、Response要素を既存のXML文書から取得する方法を示します。

例9-13 Response要素の取得とXML文書への追加

Document doc = Instance of org.w3c.dom.Document;

// Get a list of all Response elements in the document
 
NodeList respList = 
    doc.getElementsByTagNameNS(SAML2URI.ns_samlp, "Response");
if (respList.getLength() == 0)
    System.err.println("No Response elements found.");
 
// Convert each org.w3c.dom.Node object to a 
// oracle.security.xmlsec.saml2.protocol.Response object and process
 
for (int s = 0, n = respList.getLength(); s < n; ++s)
{
    Response response = new Response((Element)respList.item(s));
    // Process Response element
    ...
}

9.3.3.2 サポート・クラスとインタフェース

この項では、Oracle SAML 2.0のサポート・クラスとインタフェースの概要を説明します。内容は次のとおりです。

9.3.3.2.1 oracle.security.xmlsec.saml2.util.SAML2URIインタフェース

このインタフェースは、アルゴリズム、ネームスペースおよびオブジェクトのURI文字列定数を定義します。このインタフェースでは、次のネーミング規則が使用されます。

  • SAML 1.0/1.1/2.0仕様に定義されているアクションのネームスペースURIは、action_で始まります。

  • SAML 1.0/1.1/2.0仕様に定義されている認証メソッドのネームスペースURIは、authentication_method_で始まります。

  • SAML 1.0/1.1/2.0仕様に定義されている確認メソッドのネームスペースURIは、confirmation_method_で始まります。

  • ネームスペースURIはns_で始まります。

9.3.4 Oracle SAML 2.0のJava APIリファレンス

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

Oracle Fusion Middleware SAML 1.0/1.1 Java API Reference for Oracle Security Developer Tools

9.3.5 サンプル・プログラム

Oracleセキュリティ開発ツールを使用したサンプル・プログラムについては、Oracle Technology Network Webサイト(http://www.oracle.com/technology/sample_code/products/id_mgmt/index.html)を参照してください。