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

前
 
次
 

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.saml

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

9.2.2 Oracle SAML 1.0/1.1の環境設定

Oracleセキュリティ開発ツールは、Oracle WebLogic 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.6以上が必要です。

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.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 WebLogic ServerとともにORACLE_HOMEにインストールされます。

この項では、Oracle SAML 2.0の環境を設定する方法について説明します。次の項目について説明します。

9.3.2.1 Oracle SAML 2.0のシステム要件

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

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』