この章では、Oracle WebLogic Server SIP Containerへのデプロイ時にSIPサーブレット・リソースにセキュリティ制約を適用する方法を説明します。内容は次のとおりです。
SIP Servlet API仕様では、SIPサーブレットの宣言型セキュリティおよびプログラムに基づくセキュリティの提供に使用できるデプロイメント記述子要素のセットを定義します。セキュリティ制約を宣言するための主要な方法は、sip.xml
デプロイメント記述子の中で1つまたは複数のsecurity-constraint
要素を定義することです。security-constraint
要素は保護対象であるresource-collection
の要素で定義されたSIPサーブレットで実際のリソースを定義します。security-constraint
はリソースにアクセスするため公認されたロール名も識別します。security-constraint
内で使用されるすべてのロール名は、sip.xml
のsecurity-role
要素内の他の場所で定義されます。
SIPサーブレットでは、サーブレット・コード内でロール名をプログラム的に参照し、そのハード・コード化されたロール名をデプロイメント時にsip.xml
のsecurity-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サーブレットのセキュリティについての情報が記載されています。
WebLogic Securityプログラマーズ・ガイドの「Webアプリケーションのセキュリティ対策」では、サーブレットの宣言によるセキュリティ・モデルとプログラムによるセキュリティ・モデルについて概説されています。
「Enterprise JavaBeans (EJB)のセキュリティ対策」のEJBのセキュリティ関連のデプロイメント記述子に関する項には、EJBのセキュリティ関連のデプロイメント記述子の全要素が記述されています。呼出し先のEJBにロールを伝播する際に使用するrun-as
要素についても、ここで解説されています。
例6-1「sip.xml内の宣言によるセキュリティ制約」に示す、サンプルのsip.xml
の抜粋も参照してください。
401 SIPレスポンス・コードまたは407 SIPレスポンス・コードのどちらか適切なSIPレスポンス・コードをトリガーするようコンテナを構成することで、プロキシ・アプリケーションかUASアプリケーションかを識別できます。招待をプロキシする必要がある場合は、407コードが適切です。レジストラ・アプリケーションの場合は、401コードを使用する必要があります。
401 SIPレスポンス・コードではなく407 SIPレスポンス・コードで応答するようコンテナを構成するには、セキュリティ制約に<proxy-authentication>
要素を追加する必要があります。
sip.xmlファイル内の現在のセキュリティ・レルムの名前を、次のように指定する必要があります。
<login-config> <auth-method>DIGEST</auth-method> <realm-name>myrealm</realm-name> </login-config>
SIPサーブレットをデプロイするときは、宣言およびプログラムによるセキュリティとして作成したsecurity-role
定義を、サーブレット・コンテナで使用できる実際のプリンシパルやロールに割り当てる必要があります。Oracle WebLogic Server SIP Containerでは実際のプリンシパルやロールにsecurity-role
定義をマップする際にweblogic.xml
でsecurity-role-assignment
要素を使用します。security-role-assignment
は後でロール割当てを変更する際に必要な柔軟性の程度によって、2通りのセキュリティ・ロールのマップ方法を備えています。
security-role-assignment
要素では、sip.xml
内で定義されたロールにマップするプリンシパル名とロールのリストを定義できます。この方法ではロール割当てをデプロイメント時に定義しますが、柔軟性が犠牲になります。たとえばロールにプリンシパルを追加したり逆に削除したりするには、weblogic.xml
を編集して、SIPサーブレットを再デプロイする必要があります。
security-role-assignment
内でexternally-defined
要素を使用する方法では、管理コンソールからいつでもプリンシパル名とロールをsip.xml
のロールに割り当てることができます。externally-defined
要素を使用した場合、プリンシパルとロールをsip.xml
のロールに追加したり削除したりしてもSIPサーブレットを再デプロイする必要はありません。
さらに、sip.xml
のrun-as
要素へのロールの割当てに使用できるXML要素が2つあります。それはrun-as-principal-name
とrun-as-role-assignment
です。これらのロール割当て要素を使用した場合は、security-role-assignment
要素よりも優先されます。これについては、「run-asロールの割当て」で説明します。
また、weblogic.xml
内でロール・マッピング要素を指定せずに、暗黙的なロール・マッピングを使用することもできます。これについては、「暗黙的なロール割当ての使用」で説明します。
この項では、Oracle WebLogic Server SIP Containerのロール割当てについて詳しく説明します。
暗黙的なロール割当てを使用して、Oracle WebLogic Server SIP Containerはsip.xml
内のsecurity-role
名を同名のロールに割り当てます。このロールはOracle WebLogic Server SIP Containerセキュリティ・レルムで構成する必要があります。暗黙的なロール・マッピングを使用するには、weblogic.xml
でsecurity-role-assignment
要素を省略します。run-as
ロールをマップするためのrun-as-principal-name
およびrun-as-role-assignment
要素も省略します。
weblogic.xml
内に使用できるロール・マッピング要素がなければ、Oracle WebLogic Server SIP Containerはsip.xml
のsecurity-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
で明示的なロール・マッピングを定義すれば、このメッセージを無効にできます。
暗黙的なロール割当ては、デプロイメント時のロール・マッピングを既知のプリンシパル名にハード・コード化したい場合に使用してください。
weblogic.xml
内でsecurity-role-assignment
要素を使用すると、ロールの割当てをデプロイメント時に行えるほか、管理コンソールでいつでも行えます。次の項で、それぞれのアプローチについて説明します。
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
で割り当てられたプリンシパルとロールは無視されます。
... <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> ...
weblogic.xml
内の基本的なsecurity-role-assignment
要素定義は、sip.xml
内で定義されたsecurity-role
とOracle WebLogic Server SIP Containerセキュリティ・レルム内で使用できる1つまたは複数のプリンシパルやロールとの間でのマッピングを宣言します。security-role
をsip.xml
のrun-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サーブレットを再デプロイする必要があります。
<principal-name>
要素のかわりにexternally-defined
要素を使用すると、sip.xml
のrole-name
要素で定義したセキュリティ・ロールに、管理コンソールで割り当てるマッピングを適用することを指定できます。externally-defined
要素を使用すると、デプロイメント時にセキュリティ・ロールごとに特定のセキュリティ・ロール・マッピングを指定する必要がなくなります。この場合、管理コンソールを使って、いつでもロール割当てを指定したり変更したりできます。
なお、この要素を使用するかどうかの選択はSIPサーブレットによって違ってくるはずなので、セキュリティ・レルムに関してデプロイメント記述子のロールとポリシーを無視オプションを選択する必要はありません(このオプションの選択は、管理コンソールの「セキュリティ」>「レルム」>「myrealm」コントロール・パネルの「一般」タブの今後の再デプロイの設定:フィールドで行います)。したがって、同じセキュリティ・レルム内で、セキュリティの指定や変更の手段としてデプロイメント記述子と管理コンソールをアプリケーションに応じて使い分けることができます。
注意: セキュリティ・ロール名を指定するときは、次の規約と制限に従ってください。
|
例6-4は、例6-1「sip.xml内の宣言によるセキュリティ制約」で定義されているroleadmin
ロールでのexternally-defined
要素の使用例を示しています。既存のプリンシパルとロールをroleadmin
ロールに割り当てるには、Oracle WebLogic Server SIP Containerの管理コンソールを使用します。
「security-role-assignmentを使用したロールの割当て」で説明したsecurity-role-assignment
は、sip.xml
内で定義されたrun-as
ロールをマップするのにも使用できます。ただし、weblogic.xml
内で使われる2つの要素はsecurity-role-assignment
よりも優先されます。この2つの要素とは、run-as-principal-name
とrun-as-role-assignment
です。
run-as-principal-name
では、すべてのrun-as
ロール割当てに適用されるセキュリティ・レルム内の既存のプリンシパルを指定します。weblogic.xml
のservlet-descriptor
要素内で定義する場合は、run-as-principal-name
がその他のrun-as
ロールのロール割当て要素より優先されます。
run-as-role-assignment
では、すべてのrun-as
ロール割当てに適用されるセキュリティ・レルム内の既存のロールまたはプリンシパルを指定します。この要素はweblogic-web-app
要素内で定義します。
weblogic.xml
の個々の要素の詳細は、「weblogic.xmlデプロイメント記述子リファレンス」を参照してください。run-as
ロール・マッピングならびに宣言およびプログラムによるセキュリティのロール・マッピング優先順位については、「SIPサーブレット・ロールのロール割当て優先順位」も参照してください。
Oracle WebLogic Server SIP Containerでは、デプロイメント時にsip.xml
のロールをSIPコンテナ内の実際のロールにマップする方法が何通りかあります。sip.xml
内で定義される宣言およびプログラムによるセキュリティに関しては、ロール割当ての優先順位は次のようになります。
weblogic.xml
のsecurity-role-assignment
要素内でsip.xml
のロールを割り当てた場合は、そのsecurity-role-assignment
が使われます。
注意: Oracle WebLogic Server SIP Containerでsecurity-role-assignmentを使用するには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。 |
使用できるsecurity-role-assignment
がない場合は(または必要なweb.xml
ロール割当てがない場合)、暗黙的なロール割当てが使われます。
run-as
ロール割当てに関しては、ロール割当ての優先順位は次のようになります。
weblogic.xml
のservlet-descriptor
内で定義したrun-as-principal-name
要素内でsip.xml
のrun-as
ロールを割り当てた場合は、そのrun-as-principal-name
割当てが使われます。
注意: Oracle WebLogic Server SIP Containerでrun-as-principal-nameを使用してロールを割り当てるには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。 |
weblogic.xml
のrun-as-role-assignment
要素内でsip.xml
のrun-as
ロールを割り当てた場合は、そのrun-as-role-assignment
要素が使われます。
注意: Oracle WebLogic Server SIP Containerでrun-as-role-assignmentを使用してロールを割り当てるには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。 |
weblogic.xml
がsecurity-role-assignment
要素でsip.xml run-as
ロールを割り当てる場合は、security-role-assignment
を使用します。
注意: Oracle WebLogic Server SIP Containerでsecurity-role-assignmentを使用するには、web.xml内にロール定義が存在する必要があります。「重要な要件」を参照してください。 |
使用できるsecurity-role-assignment
がない場合は(または必要なweb.xml
ロール割当てがない場合)、暗黙的なロール割当てが使われます。
開発したSIPサーブレットのセキュリティ機能をデバッグする場合は、Oracle WebLogic Server SIP Containerの起動時に-Dweblogic.Debug=wlss.Security startup
オプションを指定します。このデバッグ・オプションを使用すると、Oracle WebLogic Server SIP Containerでセキュリティ関連の追加のメッセージが標準出力に表示されるようになります。
weblogic.xml
DTDには、この項で説明したロール・マッピング要素に関する詳細情報が記載されています。