WebLogic Web サービス プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
以下の節では、WS-Policy ファイルでコンフィグレーション可能なセキュリティ アサーションに関するリファレンス情報を示します。
WS-Policy ファイルを使用すると、WebLogic Web サービスのメッセージングレベルのセキュリティをコンフィグレーションできます。WebLogic Web サービスに関連付けられている WS-Policy ファイルの名前を指定するには、その Web サービスを実装している JWS ファイルで @Policy
および @Policies
JWS アノテーションを使用します。
WS-Policy ファイルは、WS-Policy 仕様に準拠する XML ファイルです。WS-Policy ファイルのルート要素は、常に <wsp:Policy>
です。メッセージレベルのセキュリティをコンフィグレーションするには、認証用にサポートされているトークンの種類、および SOAP メッセージを暗号化してデジタル署名する方法を指定するポリシー アサーションを追加します。
注意 : これらのセキュリティ ポリシー アサーションは、2002 年 12 月 18 日に公開された Web Services Security Policy Language (WS-SecurityPolicy) 仕様に基づいています。つまり、WebLogic Server のアサーションの正確な構文と使用方法は、この仕様で説明されているアサーションとは異なっていますが、意味上の違いはありません。このアサーションは、最新の仕様 (2005 年 7 月 13 日付) には基づいていません。
WebLogic Server には、標準的なセキュリティ アサーションを含む 3 つの WS-Policy ファイル (Auth.xml
、Sign.xml
、および Encrypt.xml
) があります。独自の WS-Policy ファイルを作成しない場合は、このファイルのいずれかを使用できます。この 3 つのファイルの詳細については、「メッセージレベルのセキュリティ コンフィグレーションに対する WS-Policy ファイルの使い方」を参照してください。
メッセージレベルでセキュリティ保護された WebLogic Web サービスをタスク中心に説明している内容については、「メッセージレベルのセキュリティ (デジタル署名と暗号化) のコンフィグレーション」を参照してください
以下の図では、WS-Policy ファイルのセキュリティ アサーションの要素の階層を示します。
図 13-2 セキュリティ WS-Policy アサーションの要素階層
<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
>
<wssp:Identity>
<wssp:SupportedTokens>
<wssp:SecurityToken TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-token-profile-1.0#SAMLAssertionID">
<wssp:Claims>
<wssp:ConfirmationMethod>sender-vouches</wssp:ConfirmationMethod>
</wssp:Claims>
</wssp:SecurityToken>
</wssp:SupportedTokens>
</wssp:Identity>
<wssp:Confidentiality>
<wssp:KeyWrappingAlgorithm
URI="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
<wssp:Target>
<wssp:EncryptionAlgorithm
URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<wssp:MessageParts
Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
wls:SecurityHeader(Assertion)
</wssp:MessageParts>
</wssp:Target>
<wssp:Target>
<wssp:EncryptionAlgorithm
URI="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
<wssp:MessageParts
Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
wsp:Body()</wssp:MessageParts>
</wssp:Target>
<wssp:KeyInfo />
</wssp:Confidentiality>
</wsp:Policy>
デジタル署名する SOAP メッセージの要素を標準化するのに使用するアルゴリズムを指定します。
注意 : WebLogic Web サービス セキュリティ ランタイムでは、ネームスペース プレフィックスのリストや、正規化アルゴリズムに対してデフォルト ネームスペースの存在を示すトークンを含む、InclusiveNamespaces PrefixList の指定をサポートしていません。
特定の種類のセキュリティ トークンに関連付けられる追加メタデータ情報を指定します。セキュリティ トークンの種類によって、以下の子要素を指定可能、または指定することが必要です。
<
UsePassword
>
子要素を定義すると、SOAP メッセージでパスワード ダイジェストを使用するかどうかを指定できる。<
ConfirmationMethod
>
子要素を定義して、SAML 確認の種類 (sender-vouches
または holder-of-key
) を指定する必要があります。SOAP メッセージの暗号化に使用するアルゴリズムやキーに加え、SOAP メッセージの一部または全部を暗号化するように指定します。
たとえば、Web サービスで、SOAP メッセージの本文全体を triple-DES で暗号化する必要がある場合などです。
ID に SAML トークンを使用する場合に使う確認メソッドの種類を指定します。この要素に対しては、sender-vouches
または holder-of-key
という 2 つの値のうちのいずれかを指定する必要があります。次に、例を示します。
<wssp:Claims>
<wssp:ConfirmationMethod>sender-vouches</wssp:ConfirmationMethod>
</wssp:Claims>
<ConfirmationMethod>
要素は、SAML トークンを使用している場合のみ、必要です。
WS-Policy ファイル内の <ConfirmationMethod>
アサーションの正確な場所は、コンフィグレーションしているコンフィグレーション メソッドの種類によって違います。具体的には、以下のとおりです。
<Identity>
アサーション内の <ConfirmationMethod>
アサーションを、次の例に示すように指定します。
<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part"
>
<wssp:Identity>
<wssp:SupportedTokens>
<wssp:SecurityToken
TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-token-profile-1.0#SAMLAssertionID
">
<wssp:Claims>
<wssp:ConfirmationMethod>sender-vouches</wssp:ConfirmationMethod>
</wssp:Claims>
</wssp:SecurityToken>
</wssp:SupportedTokens>
</wssp:Identity>
</wsp:Policy>
<Integrity>
アサーション内の <ConfirmationMethod>
アサーションを指定します。この確認メソッドのための <Integrity>
アサーションに SAML トークンを含めるのは、Web サービス ランタイムで、sender-vouches
では必要でないメッセージの整合性の証明が必要なためです。
<?xml version="1.0"?>
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:wls="http://www.bea.com/wls90/security/policy/wsee#part">
<wssp:Integrity>
<wssp:SignatureAlgorithm
URI="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<wssp:CanonicalizationAlgorithm
URI="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<wssp:Target>
<wssp:DigestAlgorithm
URI="http://www.w3.org/2000/09/xmldsig#sha1" />
<wssp:MessageParts
Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
wsp:Body()
</wssp:MessageParts>
</wssp:Target>
<wssp:SupportedTokens>
<wssp:SecurityToken
IncludeInMessage="true"
TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-token-profile-1.0#SAMLAssertionID
">
<wssp:Claims>
<wssp:ConfirmationMethod>holder-of-key</wssp:ConfirmationMethod>
</wssp:Claims>
</wssp:SecurityToken>
</wssp:SupportedTokens>
</wssp:Integrity>
</wsp:Policy>
2 つの SAML 確認メソッド (sender-vouches
または holder-of-key
) の詳細については、「WebLogic Web サービスでの SAML トークン プロファイルのサポート」を参照してください。
SOAP メッセージの指定部分にデジタル署名する際に使用するダイジェスト アルゴリズムを指定します。デジタル署名する SOAP メッセージの一部を指定するには、<MessageParts> 兄弟要素を使用します。
SOAP メッセージの指定部分を暗号化する際に使用する暗号化アルゴリズムを指定します。暗号化する SOAP メッセージの一部を指定するには、<MessageParts> 兄弟要素を使用します。
|
認証用にサポートされているセキュリティ トークンの種類 (ユーザ名、X.509、または SAML) を指定します。
SOAP メッセージのデジタル署名に使用するアルゴリズムやキーに加え、SOAP メッセージの一部または全部にデジタル署名するように指定します。
たとえば、Web サービスで、SOAP メッセージの本文全体にデジタル署名する必要があり、SHA1 と RSA キーを使用したアルゴリズムのみを受け付ける場合などです。
暗号化用のセキュリティ トークンを指定するために使用します。
メッセージの暗号化キーを暗号化するために使用するアルゴリズムを指定します。
SOAP メッセージが有効期限切れになり、破棄されるまでの期間を指定します。
WS-Policy ファイルにこのセキュリティ アサーションを含めると、Web サービス ランタイムは、WS-Policy ファイルが関連付けられている方向 (着信、発信、またはその両方) に応じて、リクエストまたは応答の SOAP メッセージに <Timestamp>
ヘッダを追加します。<Timestamp>
ヘッダは、メッセージの有効期限を、SOAP メッセージの宛先に対して示すものです。
たとえば、WS-Policy ファイルには、次のような <MessageAge>
アサーションが含まれていると仮定します。
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wssp="http://www.bea.com/wls90/security/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
>
...<wssp:MessageAge Age="300" />
</wsp:Policy>
その結果、生成された SOAP メッセージには、以下に抜粋したものに類似の <Timestamp>
ヘッダが付きます。
<wsu:Timestamp
wsu:Id="Dy2PFsX3ZQacqNKEANpXbNMnMhm2BmGOA2WDc2E0JpiaaTmbYNwT"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Created>2005-11-09T17:46:55Z</wsu:Created>
<wsu:Expires>2005-11-09T17:51:55Z</wsu:Expires>
</wsu:Timestamp>
この例において、SOAP メッセージの宛先では、2005-11-09T17:51:55Z
、つまりメッセージ作成から 5 分後以降に受信されたメッセージが、破棄されます。
Web サービス ランタイムは、SOAP メッセージ生成時に、<Created>
ヘッダを SOAP メッセージが作成された時刻に設定し、<Expires>
ヘッダは、<MessageAge>
アサーションの Age
属性の値を作成時刻に加算したものに設定します。
次の表では、<MessageAge>
アサーションの属性について説明します。
次の表では、WebLogic Web サービス セキュリティ ランタイムのタイムスタンプ動作を、そのデフォルト値と共に記述するプロパティをリストしています。
通常、前述のタイムスタンプ プロパティに変更を加える必要が生じることはありません。しかし、実際に必要になった場合は、default_wss
Web サービス セキュリティ コンフィグレーションがまだ存在していなければ、Administration Console を使用してそれを作成し、その後 [タイムスタンプ] タブをクリックして、タイムスタンプ コンフィグレーションを更新しなければなりません。タスクについては「Web サービス セキュリティ コンフィグレーションの作成」を、これらのタイムスタンプ プロパティの詳細なリファレンス情報については「ドメイン : Web サービス セキュリティ : タイムスタンプ」を参照してください。
要素の SOAP メッセージにおける、署名または暗号化されるべき SOAP メッセージの部分を、その要素の祖父要素が何であるかに応じて指定します。SOAP メッセージの部分指定を行うには、このアサーション内で XPath 1.0 式または一連のあらかじめ定義された関数のいずれかを使用できます。
MessageParts
アサーションは常に、Target
アサーションの子となります。Target
アサーションは、Integrity
アサーション (SOAP メッセージに対するデジタル署名の方法を指定) または Confidentiality
アサーション (SOAP メッセージに対する暗号化の方法を指定) のいずれかの子とすることができます。
このアサーションの使い方の詳細と、さまざまなサンプルについては、「MessageParts を使用した暗号化または署名を必要とする SOAP メッセージの部分指定」を参照してください。
|
親要素によって、認証、暗号化、またはデジタル署名のいずれかで使用できるセキュリティ トークンを指定します。
たとえば、この要素が <Identity>
親要素で定義されている場合、Web サービスを呼び出したクライアント アプリケーションは、SOAP 要求にセキュリティ トークンをアタッチする必要があります。Web サービスによっては、機密データにアクセスできるようにするために、クライアント アプリケーションが、信頼されている認証局によって発行された SAML 認証トークンを提示しなければならない場合もあります。この要素が <Confidentiality>
の一部の場合、暗号用のトークンが指定されます。
特定の種類のセキュリティ トークンは、親要素に加え、TokenType
属性の値によって決まります。
このセキュリティ アサーションは、絶対にカスタム WS-Policy ファイルに含めないようにしてください。この節での説明は、情報提供のみを目的としています。WebLogic Web サービス ランタイムは、デプロイ済みの Web サービスの動的 WSDL でパブリッシュされている WS-Policy ファイルに、このセキュリティ アサーションを自動的に挿入します。このセキュリティ アサーションは、WebLogic Server の公開鍵を指定するものです。Web サービスを呼び出すクライアント アプリケーションがその後、それを使用して、WS-Policy ファイルで指定された SOAP メッセージの各部分を暗号化します。Web サービス ランタイムが次に、サーバのプライベート キーを使用して、メッセージの暗号化を解除します。
|
親要素によって、認証、暗号化、またはデジタル署名のいずれかで使用できるセキュリティ トークンのリストを指定します。
親要素によって、暗号化またはデジタル署名する SOAP メッセージの対象に関する情報をカプセル化します。子要素も、親要素によって異なります。たとえば、<Integrity>
で使用する場合は、<DigestAlgorithm>
、<Transform>
、および <MessageParts>
子要素を指定できます。
親要素によって、電子署名または暗号化される SOAP メッセージの一部に適用されるトランスフォーメーション アルゴリズムの URI を指定します。
0 個以上の任意の数のトランスフォーメーションを指定できます。指定したトランスフォーメーションは、<Target>
親要素で指定されている順序で実行されます。
|
プレーンテキストかパスワードのダイジェストかを SOAP メッセージに表示するように指定します。この要素は、ユーザ名トークンでのみ使用されます。
WS-Policy ファイルで Integrity
または Confidentiality
アサーションのいずれかを使用する場合、Target
子アサーションも使用して、デジタル署名または暗号化を行う SOAP メッセージの対象を指定することが求められます。Target
アサーションでは、MessageParts
子アサーションを使用して、SOAP メッセージにおいて実際にデジタル署名または暗号化されるべき部分を指定することが必要です。この節では、MessageParts
アサーションのさまざまな使い方を説明します。
Confidentiality
アサーション内で MessageParts
アサーションを使用する完全な WS-Policy ファイルの例については、「セキュリティ要素のあるポリシー ファイルの例」を参照してください。この例では、SOAP メッセージの本文全体と、Assertion
セキュリティ ヘッダが、共に暗号化されるように指定する方法を示します。
MessageParts
の Dialect
属性を使用し、SOAP メッセージの各部分の識別に使用される固有言語を指定します。WebLogic Web サービス セキュリティ ランタイムでは、次の 3 つの固有言語をサポートしています。
必ず、メッセージ セキュリティ Web サービスのクライアント呼び出しの結果として生じた SOAP メッセージ内に実際に存在するメッセージの一部を指定するようにしてください。WS-Policy ファイルが署名または暗号化される部分として示している部分を含まない着信 SOAP メッセージに遭遇した場合、Web サービス セキュリティ ランタイムはエラーを返し、呼び出しは失敗します。唯一の例外としては、WebLogic 固有の wls:SystemHeader()
関数を使用して SOAP メッセージ中の任意の WebLogic 固有の SOAP ヘッダに対し署名または暗号化を行うと指定した場合に、SOAP メッセージ内にこれらのヘッダがまったく見つからなければ、Web サービス セキュリティ ランタイムはただ呼び出しを続行し、エラーを返すことはしません。
この固有言語では、XPath 1.0 式を使用して、SOAP メッセージにおける署名または暗号化されるべき部分を指定できます。この言語を有効化する Dialect
属性の値は、http://www.w3.org/TR/1999/REC-xpath-19991116
です。
通常、SOAP メッセージにおける暗号化またはデジタル署名されるべき部分は、soap:Body
要素、soap:Header
要素のいずれかの子要素であると指定する必要があります。このため、パラメータとして XPath 式を取る以下の 2 つの関数が用意されています。
wsp:GetBody(
xpath_expression
)
- XPath 式が検索を開始するルート要素を soap:Body
と指定します。wsp:GetHeader(
xpath_expression
)
- XPath 式が検索を開始するルート要素を soap:Header
と指定します。また、前述の関数の 1 つを使わず、MessageParts
アサーションのコンテンツとして簡素な XPath 式を使用することもできます。この場合、XPath 式が検索を開始するルート要素は soap:Envelope
となります。
次の例では、ネームスペース プレフィックス n1
を持ち、SOAP メッセージ本文の中に入っている AddInt
部分に対して署名を行うか暗号化を行うかを、親 Target
が Integrity
アサーションの子であるか Confidentiality
アサーションの子であるかに応じて指定しています。
<wssp:MessageParts
Dialect="http://www.w3.org/TR/1999/REC-xpath-19991116"
xmlns:n1="http://www.bea.com/foo">
wsp:GetBody(./n1:AddInt)
</wssp:MessageParts>
上の例では、XPath 式で指定された部分のネームスペース (この例では n1
) が、WS-Policy ファイルの別の場所で定義済みでなければ、MessageParts
アサーションに対する属性としてそれを定義する必要があることを示しています。
以下の例は、前述のものに似ています。ただし、署名または暗号化される部分は、wsee:Security
の子要素であり、SOAP メッセージ ヘッダ内に入っている、wsu:Timestamp
です。
<wssp:MessageParts
Dialect="http://www.w3.org/TR/1999/REC-xpath-19991116">
wsp:GetHeader(./wsse:Security/wsu:Timestamp)
</wssp:MessageParts>
前述の例では、wsee:
および wse:
ネームスペースが、WS-Policy ファイルの別の場所で定義済みであることが前提となっています。
注意 : XPath 式の作成方法については、このマニュルでは対応していません。詳細については、「XML Path Language (XPath), Version 1.0」を参照してください。
「XPath 1.0」で説明した XPath 固有言語は、SOAP メッセージにおける暗号化または署名されるべき任意の部分を正確に特定するのに十分な柔軟性を備えています。しかし場合によっては、単に SOAP メッセージ本文全体に対する署名または暗号化の指定が必要なこともあります。この場合、XPath 式を使用すると、過度に複雑になってしまうので、次の例に示すように、この目的のためだけにあらかじめ定義されている wsp:Body()
関数を使用することをお勧めします。
<wssp:MessageParts
Dialect="http://schemas.xmlsoap.org/2002/12/wsse#part">
wsp:Body()
</wssp:MessageParts>
BEA では、WebLogic セキュリティまたはシステムのヘッダの一部または全部に対する署名または暗号化を簡単に指定するための、一連の関数をあらかじめ定義した、独自の固有言語を提供しています。XPath 固有言語でも同じ目的を果たすことができますが、この WebLogic 固有言語を使用する方が、ずっと簡単です。この言語は、Dialect
属性を http://www.bea.com/wls90/security/policy/wsee#part
に設定することによって、有効化されます。
wls:SystemHeaders()
関数は、すべての WebLogic 固有ヘッダに対する署名または暗号化を指定します。これらのヘッダは、信頼性のあるメッセージングやアドレッシングなど、さまざまな機能に関して、WebLogic Web サービス ランタイムで内部的に使用されます。ヘッダは以下のとおりです。
wsrm:SequenceAcknowledgement
wsrm:AckRequested
wsrm:Sequence
wsa:Action
wsa:FaultTo
wsa:From
wsa:MessageID
wsa:RelatesTo
wsa:ReplyTo
wsa:To
wsax:SetCookie
wsu:Timestamp
以下の例では、wls:SystemHeader()
関数の使い方を示します。
<wssp:MessageParts
Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
wls:SystemHeaders()
</wssp:MessageParts>
セキュリティ ヘッダにおける署名または暗号化されるべき特定の部分を指定するには、以下の例に示すように、wls:SecurityHeader(
header
)
関数を使用します。
<wssp:MessageParts
Dialect="http://www.bea.com/wls90/security/policy/wsee#part">
wls:SecurityHeader(wsu:Timestamp)
</wssp:MessageParts>
この例では、wsu:Timestamp
セキュリティ ヘッダのみが署名または暗号化されます。wls:SecurityHeader()
関数に対しては、前述のヘッダのリストのうち任意のものを指定できます。
![]() ![]() |
![]() |
![]() |