ヘッダーをスキップ
Oracle® WebLogic Server SIP Container開発者ガイド
11g リリース1(11.1.1)
B61430-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 SIPサーブレット・リソースのセキュリティ

この章では、Oracle WebLogic Server SIP Containerへのデプロイ時にSIPサーブレット・リソースにセキュリティ制約を適用する方法を説明します。内容は次のとおりです。

6.1 SIPサーブレット・セキュリティの概要

SIP Servlet API仕様では、SIPサーブレットの宣言型セキュリティおよびプログラムに基づくセキュリティの提供に使用できるデプロイメント記述子要素のセットを定義します。セキュリティ制約を宣言するための主要な方法は、sip.xmlデプロイメント記述子の中で1つまたは複数のsecurity-constraint要素を定義することです。security-constraint要素は保護対象であるresource-collectionの要素で定義されたSIPサーブレットで実際のリソースを定義します。security-constraintはリソースにアクセスするため公認されたロール名も識別します。security-constraint内で使用されるすべてのロール名は、sip.xmlsecurity-role要素内の他の場所で定義されます。

SIPサーブレットでは、サーブレット・コード内でロール名をプログラム的に参照し、そのハード・コード化されたロール名をデプロイメント時にsip.xmlsecurity-role-ref要素内で別のロールにマップすることもできます。security-role-ref要素内でハード・コード化された名前にマップしようとするロールは、security-role要素内の他の場所で定義しておく必要があります。

SIPサーブレット仕様によると、サーブレットではrun-as要素を使って呼出し先のEnterprise JavaBeans (EJB)にセキュリティ・ロールを伝播することもできます。run-as要素内で使用するロールは、sip.xmlの別個のsecurity-role要素内で定義する必要があります。

SIP Servlet API仕様の第14章には、SIPサーブレットで使用できるセキュリティのタイプに関して、さらに詳しい記述があります。SIPサーブレットのセキュリティ機能は、HTTPサーブレットで使用できるセキュリティ機能に似ています。Oracle WebLogic Server SIP Containerドキュメントの次の項には、HTTPサーブレットのセキュリティについての情報が記載されています。

例6-1「sip.xml内の宣言によるセキュリティ制約」に示す、サンプルのsip.xmlの抜粋も参照してください。

6.2 SIPレスポンス・コードのトリガー

401 SIPレスポンス・コードまたは407 SIPレスポンス・コードのどちらか適切なSIPレスポンス・コードをトリガーするようコンテナを構成することで、プロキシ・アプリケーションかUASアプリケーションかを識別できます。招待をプロキシする必要がある場合は、407コードが適切です。レジストラ・アプリケーションの場合は、401コードを使用する必要があります。

401 SIPレスポンス・コードではなく407 SIPレスポンス・コードで応答するようコンテナを構成するには、セキュリティ制約に<proxy-authentication>要素を追加する必要があります。

6.3 セキュリティ・レルムの指定

sip.xmlファイル内の現在のセキュリティ・レルムの名前を、次のように指定する必要があります。

<login-config>
<auth-method>DIGEST</auth-method> 
<realm-name>myrealm</realm-name>
</login-config>

6.4 ロール・マッピング機能

SIPサーブレットをデプロイするときは、宣言およびプログラムによるセキュリティとして作成したsecurity-role定義を、サーブレット・コンテナで使用できる実際のプリンシパルやロールに割り当てる必要があります。Oracle WebLogic Server SIP Containerでは実際のプリンシパルやロールにsecurity-role定義をマップする際にweblogic.xmlsecurity-role-assignment要素を使用します。security-role-assignmentは後でロール割当てを変更する際に必要な柔軟性の程度によって、2通りのセキュリティ・ロールのマップ方法を備えています。

さらに、sip.xmlrun-as要素へのロールの割当てに使用できるXML要素が2つあります。それはrun-as-principal-namerun-as-role-assignmentです。これらのロール割当て要素を使用した場合は、security-role-assignment要素よりも優先されます。これについては、「run-asロールの割当て」で説明します。

また、weblogic.xml内でロール・マッピング要素を指定せずに、暗黙的なロール・マッピングを使用することもできます。これについては、「暗黙的なロール割当ての使用」で説明します。

この項では、Oracle WebLogic Server SIP Containerのロール割当てについて詳しく説明します。

6.5 暗黙的なロール割当ての使用

暗黙的なロール割当てを使用して、Oracle WebLogic Server SIP Containerはsip.xml内のsecurity-role名を同名のロールに割り当てます。このロールはOracle WebLogic Server SIP Containerセキュリティ・レルムで構成する必要があります。暗黙的なロール・マッピングを使用するには、weblogic.xmlsecurity-role-assignment要素を省略します。run-asロールをマップするためのrun-as-principal-nameおよびrun-as-role-assignment要素も省略します。

weblogic.xml内に使用できるロール・マッピング要素がなければ、Oracle WebLogic Server SIP Containerはsip.xmlsecurity-role要素を同名のロールに自動的にマップします。なお、暗黙的なロール・マッピングは、sip.xmlで定義されたロール名が実際にセキュリティ・レルムにあるかどうかに関係なく行われます。Oracle WebLogic Server SIP Containerで暗黙的なロール割当てが使用されるときは常に警告メッセージが表示されます。たとえば、sip.xmlで「everyone」ロールを使用し、weblogic.xmlでこのロールを明示的に割り当てなかった場合、次のような警告メッセージが表示されます。

<Webapp: ServletContext(id=id,name=application,context-path=/context), the role: everyone defined in web.xml has not been mapped to principals in security-role-assignment in weblogic.xml. Will use the rolename itself as the principal-name.>

対応するロールをOracle WebLogic Server SIP Containerセキュリティ・レルムで定義してあれば、この警告メッセージは無視できます。weblogic.xmlで明示的なロール・マッピングを定義すれば、このメッセージを無効にできます。

暗黙的なロール割当ては、デプロイメント時のロール・マッピングを既知のプリンシパル名にハード・コード化したい場合に使用してください。

6.6 security-role-assignmentを使用したロールの割当て

weblogic.xml内でsecurity-role-assignment要素を使用すると、ロールの割当てをデプロイメント時に行えるほか、管理コンソールでいつでも行えます。次の項で、それぞれのアプローチについて説明します。

6.6.1 重要な要件

weblogic.xml内でsecurity-role-assignment要素を指定する場合、Oracle WebLogic Server SIP Containerではweb.xmlデプロイメント記述子内でもsecurity-role要素を定義する必要があります。この要件は純粋なSIPサーブレットをデプロイする場合にも適用されます。通常、純粋なSIPサーブレットをデプロイする場合にはweb.xmlデプロイメント記述子は必要とされません(一般にHTTP Webアプリケーション用に確保されています)。


注意:

weblogic.xmlでsecurity-role-assignmentを指定する場合に、web.xml内に対応するsecurity-role要素がないと、Oracle WebLogic Server SIP Containerでは次のようなエラー・メッセージが表示されます
The security-role-assignment references an invalid security-role: rolename

「暗黙的なロール割当ての使用」で説明されているように、sip.xml内で定義されているsecurity-roleが同名のロールに自動的にマップされます。


例として、例6-1に、ロールroleadminでセキュリティ制約を定義するsip.xmlデプロイメント記述子の一部を示します。例6-2は、roleadminにプリンシパルとロールを割り当てるために、weblogic.xmlで定義されているsecurity-role-assignment要素を示します。Oracle WebLogic Server SIP Containerでは、このサーブレットを、roleadminロールも定義するweb.xmlデプロイメント記述子でデプロイする必要があります(例6-3を参照)。

web.xmlの内容が使用できない場合、Oracle WebLogic Server SIP Containerは暗黙的なロール割当てを使用し、セキュリティ・レルムでroleadminロールが定義されているものと見なします。その場合、weblogic.xmlで割り当てられたプリンシパルとロールは無視されます。

例6-1 sip.xml内の宣言によるセキュリティ制約

...
  <security-constraint>
      <resource-collection>
      <resource-name>RegisterRequests</resource-name>
      <servlet-name>registrar</servlet-name>
    </resource-collection>
    <auth-constraint>
      <javaee:role-name>roleadmin</javaee:role-name>
    </auth-constraint>
  </security-constraint>

  <security-role>
    <javaee:role-name>roleadmin</javaee:role-name>
  </security-role>
...

例6-2 weblogic.xml内のsecurity-role-assignmentの例

<weblogic-web-app>
  <security-role-assignment>
       <role-name>roleadmin</role-name>
       <principal-name>Tanya</principal-name>
       <principal-name>Fred</principal-name>
       <principal-name>system</principal-name>
  </security-role-assignment>
</weblogic-web-app>

例6-3 web.xmlに必須のsecurity-role要素

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <security-role>
    <role-name>roleadmin</role-name>
  </security-role>
</web-app>

6.6.2 デプロイメント時のロールの割当て

weblogic.xml内の基本的なsecurity-role-assignment要素定義は、sip.xml内で定義されたsecurity-roleとOracle WebLogic Server SIP Containerセキュリティ・レルム内で使用できる1つまたは複数のプリンシパルやロールとの間でのマッピングを宣言します。security-rolesip.xmlrun-as要素と組み合せて使用した場合、Oracle WebLogic Server SIP Containerはsecurity-role-assignmentで指定された最初のプリンシパル名またはロール名をrun-asロールに割り当てます。

例6-2「weblogic.xml内のsecurity-role-assignmentの例」は、security-role-assignment要素の例を示しています。この例では、例6-3「sip.Xml内の宣言によるセキュリティ制約」で定義されているroleadminロールに3人のユーザーを割り当てています。このロール割当てを変更するには、weblogic.xml記述子を編集し、SIPサーブレットを再デプロイする必要があります。

6.6.3 管理コンソールを使用した動的なロールの割当て

<principal-name>要素のかわりにexternally-defined要素を使用すると、sip.xmlrole-name要素で定義したセキュリティ・ロールに、管理コンソールで割り当てるマッピングを適用することを指定できます。externally-defined要素を使用すると、デプロイメント時にセキュリティ・ロールごとに特定のセキュリティ・ロール・マッピングを指定する必要がなくなります。この場合、管理コンソールを使って、いつでもロール割当てを指定したり変更したりできます。

なお、この要素を使用するかどうかの選択はSIPサーブレットによって違ってくるはずなので、セキュリティ・レルムに関してデプロイメント記述子のロールとポリシーを無視オプションを選択する必要はありません(このオプションの選択は、管理コンソールの「セキュリティ」>「レルム」>「myrealm」コントロール・パネルの「一般」タブの今後の再デプロイの設定:フィールドで行います)。したがって、同じセキュリティ・レルム内で、セキュリティの指定や変更の手段としてデプロイメント記述子と管理コンソールをアプリケーションに応じて使い分けることができます。


注意:

セキュリティ・ロール名を指定するときは、次の規約と制限に従ってください。
  • セキュリティ・ロール名の正しい構文は、XML (Extensible Markup Language)推奨仕様でNmtokenに関して定義されているとおりです(http://www.w3.org/TR/REC-xml#NT-Nmtoken)。

  • スペース、カンマ、ハイフン、\t、< >、#、|、&、~、?、( )、{ }を使用しないでください。

  • セキュリティ・ロール名では大文字と小文字が区別されます。

  • Oracleのネーミング・ルールではセキュリティ・ロール名は単数形です。


例6-4は、例6-1「sip.xml内の宣言によるセキュリティ制約」で定義されているroleadminロールでのexternally-defined要素の使用例を示しています。既存のプリンシパルとロールをroleadminロールに割り当てるには、Oracle WebLogic Server SIP Containerの管理コンソールを使用します。

例6-4 weblogic.xmlの外部で定義された要素のサンプル

<weblogic-web-app>
     <security-role-assignment>
         <role-name>webuser</role-name>
         <externally-defined/>
     </security-role-assignment>
</weblogic-web-app>

6.7 run-asロールの割当て

「security-role-assignmentを使用したロールの割当て」で説明したsecurity-role-assignmentは、sip.xml内で定義されたrun-asロールをマップするのにも使用できます。ただし、weblogic.xml内で使われる2つの要素はsecurity-role-assignmentよりも優先されます。この2つの要素とは、run-as-principal-namerun-as-role-assignmentです。

run-as-principal-nameでは、すべてのrun-asロール割当てに適用されるセキュリティ・レルム内の既存のプリンシパルを指定します。weblogic.xmlservlet-descriptor要素内で定義する場合は、run-as-principal-nameがその他のrun-asロールのロール割当て要素より優先されます。

run-as-role-assignmentでは、すべてのrun-asロール割当てに適用されるセキュリティ・レルム内の既存のロールまたはプリンシパルを指定します。この要素はweblogic-web-app要素内で定義します。

weblogic.xmlの個々の要素の詳細は、「weblogic.xmlデプロイメント記述子リファレンス」を参照してください。run-asロール・マッピングならびに宣言およびプログラムによるセキュリティのロール・マッピング優先順位については、「SIPサーブレット・ロールのロール割当て優先順位」も参照してください。

6.8 SIPサーブレット・ロールのロール割当て優先順位

Oracle WebLogic Server SIP Containerでは、デプロイメント時にsip.xmlのロールをSIPコンテナ内の実際のロールにマップする方法が何通りかあります。sip.xml内で定義される宣言およびプログラムによるセキュリティに関しては、ロール割当ての優先順位は次のようになります。

  1. weblogic.xmlsecurity-role-assignment要素内でsip.xmlのロールを割り当てた場合は、そのsecurity-role-assignmentが使われます。


    注意:

    Oracle WebLogic Server SIP Containerでsecurity-role-assignmentを使用するには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。

  2. 使用できるsecurity-role-assignmentがない場合は(または必要なweb.xmlロール割当てがない場合)、暗黙的なロール割当てが使われます。

run-asロール割当てに関しては、ロール割当ての優先順位は次のようになります。

  1. weblogic.xmlservlet-descriptor内で定義したrun-as-principal-name要素内でsip.xmlrun-asロールを割り当てた場合は、そのrun-as-principal-name割当てが使われます。


    注意:

    Oracle WebLogic Server SIP Containerでrun-as-principal-nameを使用してロールを割り当てるには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。

  2. weblogic.xmlrun-as-role-assignment要素内でsip.xmlrun-asロールを割り当てた場合は、そのrun-as-role-assignment要素が使われます。


    注意:

    Oracle WebLogic Server SIP Containerでrun-as-role-assignmentを使用してロールを割り当てるには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。

  3. weblogic.xmlsecurity-role-assignment要素でsip.xml run-asロールを割り当てる場合は、security-role-assignmentを使用します。


    注意:

    Oracle WebLogic Server SIP Containerでsecurity-role-assignmentを使用するには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。

  4. 使用できるsecurity-role-assignmentがない場合は(または必要なweb.xmlロール割当てがない場合)、暗黙的なロール割当てが使われます。

6.9 セキュリティ機能のデバッグ

開発したSIPサーブレットのセキュリティ機能をデバッグする場合は、Oracle WebLogic Server SIP Containerの起動時に-Dweblogic.Debug=wlss.Security startupオプションを指定します。このデバッグ・オプションを使用すると、Oracle WebLogic Server SIP Containerでセキュリティ関連の追加のメッセージが標準出力に表示されるようになります。

6.10 weblogic.xmlデプロイメント記述子リファレンス

weblogic.xml DTDには、この項で説明したロール・マッピング要素に関する詳細情報が記載されています。