ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Security Developer Toolsによるアプリケーションの開発
12c (12.2.1)
E72521-01
  目次へ移動
目次

前
次
 

8 Oracle SAML

この章では、Oracle SAML (Security Assertions Markup Language)のSoftware Development Kit (SDK)の使用方法について説明します。

Java開発者は、Oracle SAMLを使用して、SAML 1.0/1.1およびSAML 2.0仕様に準拠する、クロスドメイン・シングル・サインオンおよびフェデレーテッド・アクセス制御を実装したソリューションを開発できます。

この章のトピックは、次のとおりです:

8.1 Oracle SAMLの機能と利点

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

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

  • SAML 1.0/1.1および2.0仕様のサポート

  • SAMLベースのシングル・サインオン(SSO)、属性、メタデータ、拡張クライアント・プロキシ、およびフェデレーテッド・アイデンティティ・プロファイルのサポート

関連項目:

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

8.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ツールキットのクラスとインタフェースについて説明します。次の項目が含まれます。

8.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)をサポートするクラスが含まれます。

8.2.2 Oracle SAML 1.0/1.1の環境設定

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

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

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エンジン)

構成の詳細は、「CLASSPATH環境変数の設定」を参照してください。

8.2.3 Oracle SAML 1.xのクラスおよびインタフェース

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

8.2.3.1 Oracle SAML 1.xのコア・クラス

SAMLアサーション、リクエストおよびレスポンスはOracle SAML APIを使用して作成されます。

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

内容は次のとおりです。

8.2.3.1.1 oracle.security.xmlsec.saml.SAMLInitializerクラスの使用方法

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

次の例に、SAMLのツールキットをSAML v1.0とSAML v1.1に対して初期化する方法を示します。

// initializes for SAML v1.1
SAMLInitializer.initialize(1, 1); 
// initializes for SAML v1.0, done by default
SAMLInitializer.initialize(1, 0); 
8.2.3.1.2 oracle.security.xmlsec.saml.Assertionクラスの使用方法

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

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

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

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

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
    ...
}
8.2.3.1.3 oracle.security.xmlsec.samlp.Requestクラスの使用方法

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

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

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

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

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
    ...
}
8.2.3.1.4 oracle.security.xmlsec.samlp.Responseクラスの使用方法

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

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

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

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

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

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

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

8.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_で始まります。

8.2.3.2.2 oracle.security.xmlsec.saml.SAMLMessageクラスの使用方法

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

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

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

Oracle Fusion Middleware Oracle Security Developer Tools Java APIリファレンス

8.3 Oracle SAML 2.0

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

8.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プロファイルをサポートするクラスが含まれます。

8.3.2 Oracle SAML 2.0の環境設定

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

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

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エンジン)

たとえば、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;

構成の詳細は、「CLASSPATH環境変数の設定」を参照してください。

8.3.3 Oracle SAML 2.0のクラスおよびインタフェース

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

8.3.3.1 Oracle SAML 2.0のコア・クラス

Oracle SAML 2.0 APIのコア・クラスにより、アサーション、リクエストおよびレスポンスを作成することができます。

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

8.3.3.1.1 oracle.security.xmlsec.saml2.core.Assertionクラスの使用方法

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

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

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

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

// 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
    ...
}
8.3.3.1.2 oracle.security.xmlsec.saml2.protocol.AuthnRequestクラスの使用方法

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

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

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

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

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
    ...
}
8.3.3.1.3 oracle.security.xmlsec.saml2.protocol.StatusResponseTypeクラスの使用方法

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

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

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

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

次の例に、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
    ...
}

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

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

8.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_で始まります。

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

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

Oracle Fusion Middleware Oracle Security Developer Tools Java APIリファレンス