この章では、Oracle SAML(Security Assertions Markup Language)のSoftware Development Kit(SDK)の使用について説明します。Java開発者は、Oracle SAMLを使用して、SAML 1.0/1.1仕様に準拠する、クロスドメイン・シングル・サインオンおよびフェデレーテッド・アクセス制御を実装したソリューションを開発できます。
この章に含まれる内容は次のとおりです。
Oracle SAML SDKでは、SAML準拠のJavaセキュリティ・サービスの開発を支援する、サポート・ツール、ドキュメントおよびサンプル・プログラムを含むJava APIが提供されます。Oracle SAMLは、アプレット、アプリケーション、EJB、サーブレット、JSPなどの既存のJavaソリューションに統合できます。
Oracle SAMLでは次の機能が提供されます。
SAML 1.0/1.1仕様のサポート
Liberty Allianceプロジェクトで指定したようなSAMLベースのシングル・サインオンおよびフェデレーテッドIDプロファイルのサポート
Oracleセキュリティ開発ツールは、Oracle Application ServerとともにORACLE_HOME
にインストールされます。
この項では、Oracle SAMLを使用するための環境設定について説明します。この項に含まれる内容は次のとおりです。
CLASSPATH
環境変数には、必要なjarファイルおよびclassファイルすべてのフルパスとファイル名を指定してください。次の項目をCLASSPATH
に指定します。
osdt_core.jar
osdt_cert.jar
osdt_xmlsec.jar
osdt_saml.jar
jaxen.jar
ファイル(Oracle XML Securityディストリビューションに含まれるJaxen XPathエンジン)
選択したXMLパーサーおよびXSLTプロセッサのjarファイル(たとえば、Apache Xalan-Javaを使用する場合はxalan.jar
およびxercesImpl.jar
)
WindowsでCLASSPATH
を設定する手順を次に示します。
Windowsの「コントロール パネル」で「システム」を選択します。
「システムのプロパティ」ダイアログで「詳細設定」タブを選択します。
「環境変数」をクリックします。
ユーザー環境変数のセクションで「新規」をクリックし、CLASSPATH
環境変数をユーザー・プロファイルに追加します。CLASSPATH
環境変数がすでに存在している場合は、選択して「編集」をクリックします。
必要なjarファイルすべてのフルパスとファイル名をCLASSPATH
に追加します。
たとえば、CLASSPATH
は次のようになります。
%CLASSPATH%;C:\ORACLE_HOME\jlib\osdt_core.jar; C:\ORACLE_HOME\jlib\osdt_cert.jar; C:\ORACLE_HOME\jlib\osdt_xmlsec.jar; C:\ORACLE_HOME\jlib\osdt_saml.jar; C:\ORACLE_HOME\jlib\jaxen.jar; C:\xalan-j_2_6_0\bin\xalan.jar;C:\xalan-j_2_6_0\bin\xercesImpl.jar
「OK」をクリックします。
UNIXでは、必要なjarファイルおよびclassファイルすべてのフルパスとファイル名を含むようにCLASSPATH
環境変数を設定します。次に例を示します。
setenv CLASSPATH $CLASSPATH:$ORACLE_HOME/jlib/osdt_core.jar:\ $ORACLE_HOME/jlib/osdt_cert.jar:\ $ORACLE_HOME/jlib/osdt_xmlsec.jar:\ $ORACLE_HOME/jlib/osdt_saml.jar:\ $ORACLE_HOME/jlib/jaxen.jar:\ /usr/lib/xalan-j_2_6_0/bin/xalan.jar:/usr/lib/xalan-j_2_6_0/bin/xercesImpl.jar
この項では、Oracle SAMLの主要なクラスとインタフェースの使用について説明し、コード例を示します。コア・クラスを次に示します。
サポート・クラスとインタフェースを次に示します。
この項では、SAMLおよびSAMLPのコア・クラスの概要をコード例と一緒に説明します。
このクラスはOracle SAMLのツールキットを初期化します。デフォルトでは、Oracle SAMLはSAML v1.0に対応するように初期化されます。特定のバージョンのSAML仕様に合せてOracle SAMLを初期化することもできます。特定のバージョンに対してinitialize
メソッドをコールしても、以前に初期化されたバージョンはそのままになります。例9-1に、SAMLのツールキットをSAML v1.0とSAML v1.1に対して初期化する方法を示します。
このクラスは、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
...
}
このクラスは、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
...
}
このクラスは、SAMLプロトコル・スキーマのResponse
要素を表します。SAMLPレスポンス・メッセージの作成の詳しい例は、Oracle SAMLディストリビューションのexamples
ディレクトリにあるCreateAuthDecisionResponse.java
のサンプル・プログラムを参照してください。
例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
...
}
この項では、Oracle SAMLのサポート・クラスとインタフェースの概要を説明します。
このインタフェースは、アルゴリズム、ネームスペースおよびオブジェクトのURI文字列定数を定義します。次のネーミング規則が使用されます。
SAML 1.0仕様に定義されているアクションのネームスペースURIは、action_
で始まります。
SAML 1.0仕様に定義されている認証メソッドのネームスペースURIは、authentication_method_
で始まります。
SAML 1.0仕様に定義されている確認メソッドのネームスペースURIは、confirmation_method_
で始まります。
ネームスペースのURIはns_
で始まります。