BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic Security プログラマーズ ガイド

 Previous Next Contents Index PDF で侮ヲ  

Web アプリケーションのセキュリティ対策

WebLogic Server は Web アプリケーションを保護する J2EE アーキテクチャ セキュリティ モデルをサポートします。これには、宣言による認可 (このマニュアルでは宣言によるセキュリティともいう) およびプログラムによる認可 (このマニュアルではプログラムによるセキュリティともいう) のサポートが含まれます。

ここでは以下のトピックについて説明します。

注意: Web アプリケーションの保護には、デプロイメント記述子ファイルと Administration Console を使用できます。 このマニュアルでは、デプロイメント記述子ファイルの使用方法について説明します。Administration Console を使用しての Web アプリケーションの保護については、『WebLogic リソースのセキュリティ』を参照してください。

 


J2EE セキュリティ モデル

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3 Authorization」に、以下のような記述があります。

「J2EE アーキテクチャにおいて、コンテナはホストするコンポーネントとその呼び出し側との間の認可境界として機能します。認可境界は、コンテナの認証境界内に存在するので、認可は正常に実行される認証との関連で考慮されます。着信呼び出しの場合、コンテナは呼び出し側の資格のセキュリティ属性と、対象コンポーネントのアクセス制御ルールを比較します。ルール要件が満たされていれば、呼び出しは許可されます。それ以外の場合、この呼び出しは拒否されます。」

「アクセス制御ルールの定義には、能力とパーミッションという 2 つの基本的アプローチが存在します。能力は呼び出し側が実行できる操作、パーミッションは操作を実行できるユーザを焦点とします。J2EE アプリケーション プログラミング モデルは、パーミッションを焦点とします。J2EE アーキテクチャにおいて、デプロイヤの役割はアプリケーションのパーミッション モデルをその操作環境におけるユーザの能力にマップすることです。」

次にこのマニュアルでは、J2EE アーキテクチャ、宣言による認可、およびプログラムによる認可を使用してアプリケーション リソースへのアクセスを制御する 2 つの方法について説明します。

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

宣言による認可

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3.1 Authorization」に、以下のような記述があります。

「デプロイヤは、J2EE アプリケーションと関連のコンテナによって実施されるアクセス制御ルールを設定します。デプロイヤは、デプロイメント ツールを使用して、通常はアプリケーション アセンブラによって供給されるアプリケーション パーミッション モデルを、操作環境に固有のポリシーおよびメカニズムにマップします。アプリケーション パーミッション モデルは、デプロイメント記述子で定義されます。」

WebLogic Server は Web アプリケーションにおいて宣言による認可を実装するためのデプロイメント記述子の使用をサポートしています。

注意: 宣言による認可は、このマニュアルでは宣言によるセキュリティとも呼ばれます。

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

プログラムによる認可

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3.2 Programmatic Authorization」に、以下のような記述があります。

「J2EE コンテナは、コンポーネントにメソッド呼び出しをディスパッチする前に、アクセス制御の決定を行います。コンポーネントの論理または状態は、これらのアクセス決定を考慮に入れません。しかし、コンポーネントは EJBContext.isCallerInRole (エンタープライズ Bean コード用) および HttpServletRequest.isUserInRole (Web コンポーネント用) の 2 つのメソッドを使用して、きめ細かいアクセス制御を行うことが可能です。コンポーネントはこれらのメソッドを使用して、呼び出しのパラメータ、コンポーネントの初期状態、または呼び出しの時間などその他の要因に基づきコンポーネントによって選択された特権が、呼び出し側に付与されているかどうかを判断します。」

「これらの機能の 1 つを呼び出すコンポーネントのアプリケーション コンポーネント プロバイダは、すべての呼び出しで使用されるあらゆる個別の roleName 値を宣言する必要があります。これらの宣言は、デプロイメント記述子では security-role-ref 要素として登場します。各 security-role-ref 要素は、アプリケーションに roleName として組み込まれた特権名をセキュリティ ロールにリンクします。最終的には、デプロイヤはアプリケーションに組み込まれた特権名と、デプロイメント記述子で定義されたセキュリティ ロールの間のリンクを確立します。特権名とセキュリティ ロールの間のリンクは、同じアプリケーション内でもコンポーネントごとに異なる場合があります。」

「特定の特権をテストするだけでなく、アプリケーション コンポーネントでは EJBContext.getCallerPrincipal または HttpServletRequest.getUserPrincipal を使用して取得した呼び出し側 ID と、作成時のコンポーネントの状態に組み込まれている識別された呼び出し側 ID を比較できます。呼び出し側 ID が識別された呼び出し側のものに等しければ、コンポーネントは呼び出し側に処理の続行を許可できます。等しくなければ、コンポーネントは呼び出し側がそれ以上の対話を行わないようにできます。コンテナによって返された呼び出し側のプリンシパルは、呼び出し側が使用した認証メカニズムによって決まります。また、同じメカニズムによる同じユーザ認証に対してでも、異なったベンダからのコンテナは異なったプリンシパルを返す場合があります。プリンシパルの形式の変動性を考慮に入れるため、コンポーネントのアクセス決定に識別された呼び出し側の状態を適用することを選択した開発者は、同一ユーザを表す複数の識別された呼び出し側 ID がコンポーネントと関連付けられることを許容する必要があります。これは特に、アプリケーションの融通性や移植性が優先される場合に、推奨されます。

WebLogic Server は、Web アプリケーションにおけるプログラムによる認可を実装するための HttpServletRequest.isUserInRole メソッドと HttpServletRequest.getUserPrincipal メソッドの使用、および security-role-ref 要素の使用をサポートしています。

注意: プログラムによる認可は、このマニュアルではプログラムによるセキュリティとも呼ばれます。

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

宣言による認可とプログラムによる認可

Sun Microsystems, Inc. のマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』の「Section 9.3.3 Declarative Versus Programmatic Authorization」に、以下のような記述があります。

「デプロイヤによってコンフィグレーションされる外部アクセス制御ポリシーと、コンポーネント プロバイダによってアプリケーションに組み込まれた内部ポリシーの間にはトレードオフが存在します。アプリケーションが作成された後では、外部ポリシーのほうが高い融通性を持ちます。アプリケーションが記述されている過程では、内部ポリシーのほうが融通性の高い機能を提供します。また、外部ポリシーはデプロイヤにとって透過的で完全に理解可能であるのに対し、内部ポリシーはアプリケーションに埋め込まれており、これを完全に理解できるのはアプリケーション開発者のみである可能性があります。ある特定のコンポーネントとメソッドについて認可モデルを選択する際には、これらのトレードオフを検討する必要があります。」

Sun Microsystems, Inc. の発行によるマニュアル『Designing Enterprise Applications with the J2EE Platform, Second Edition』は、http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/security/security4.html からオンラインで入手できます。

 


Web ブラウザでの認証

Web ブラウザは、HyperText Transfer Protocol (HTTP) ポートまたは HTTP with SSL (HTTPS) ポートを介して WebLogic Server に接続できます。HTTP ポートではなく HTTPS ポートを利用するメリットは 2 つあります。HTTPS 接続を利用するメリットは以下のとおりです。

双方向 SSL 認証を行うようにサーバがコンフィグレーションされた場合は、サーバとクライアントの両方が互いにデジタル証明書を提示して、身元を証明する必要があります。

ユーザ名およびパスワードの認証

WebLogic Server では、ユーザが Web ブラウザを使用して HTTP ポート経由でサーバに接続するときにユーザ名とパスワードの認証が行われます。その場合、ブラウザと WebLogic Server のインスタンスは次のように対話してユーザを認証します (図 2-1 を参照)。

  1. ユーザは、Web ブラウザでリソースの URL を入力して、WebLogic Server の WebLogic リソースを呼び出します。その URL では、たとえば http://myserver:7001 のように HTTP および HTTP リスン ポートを指定します。

  2. WebLogic Server の Web サーバがリクエストを受け取ります。

    注意: WebLogic Server では独自の Web サーバを用意していますが、Apache Server、Microsoft Internet Information Server、および Netscape Enterprise Server も Web サーバとして使用できます。

  3. Web サーバは、要求された WebLogic リソースがセキュリティ ポリシーによって保護されているかどうかチェックします。 WebLogic リソースが保護されている場合、Web サーバは確立されている HTTP 接続を使用して、ユーザのユーザ名とパスワードを要求します。

  4. ユーザの Web ブラウザが Web サーバからのリクエストを受け取ると、ユーザに対してユーザ名とパスワードを要求します。

  5. Web ブラウザは、Web サーバに対してユーザ名とパスワードと一緒にリクエストを再送信します。

  6. Web サーバはリクエストを Web サーバ プラグインに転送します。WebLogic Server では、Web サーバ用に以下のプラグインを提供します。

    Web サーバ プラグインは、HTTP プロトコルを使用して、ユーザから受け取った認証データ (ユーザ ID とパスワード) と一緒に認証リクエストを WebLogic Server に送信することで認証を行います。

  7. 認証が正常に行われると、WebLogic Server は処理を続行してユーザが WebLogic リソースへのアクセスを認可されているかどうかを判断します。

  8. WebLogic リソースに対してメソッドを呼び出す前に、WebLogic Server インスタンスはセキュリティ認可チェックを実行します。 サーバは、このチェックで、ユーザの資格をセキュリティ コンテキストから取り出し、ユーザのセキュリティ ロールを判定し、そのユーザのセキュリティ ロールを、要求された WebLogic リソースのセキュリティ ポリシーと照らし合わせて、ユーザが WebLogic リソースに対してメソッドを呼び出す権限があることを確認します。

  9. 認可が成功すると、サーバがリクエストを遂行します。

    図2-1 Web ブラウザのセキュア ログイン


     

デジタル証明書の認証

WebLogic Server は、Web ブラウザのユーザが HTTPS ポート経由でサーバに接続する場合に暗号化とデジタル証明書の認証を使用します。その場合、ブラウザと WebLogic Server インスタンスは次のように対話してユーザを認証および認可します (図 2-1 を参照)。

  1. ユーザは、Web ブラウザでリソースの URL を入力して、WebLogic Server の WebLogic リソースを呼び出します。その URL では、たとえば https://myserver:7002 のように SSL リスン ポートと HTTPS スキーマを指定します。

  2. WebLogic Server の Web サーバがリクエストを受け取ります。

    注意: WebLogic Server では独自の Web サーバを用意していますが、Apache Server、Microsoft Internet Information Server、および Netscape Enterprise Server も Web サーバとして使用できます。

  3. Web サーバは、要求された WebLogic リソースがセキュリティ ポリシーによって保護されているかどうかチェックします。 WebLogic リソースが保護されている場合、Web サーバは確立されている HTTPS 接続を使用して、ユーザのユーザ名とパスワードを要求します。

  4. ユーザの Web ブラウザが WebLogic Server からのリクエストを受け取ると、ユーザに対してユーザ名とパスワードを要求します。(この手順は省略可能です。)

  5. Web ブラウザは、ユーザ名とパスワードと一緒にリクエストを再送信します (サーバから要求された場合のみ)。

  6. WebLogic Server は、Web ブラウザにデジタル証明書を提示します。

  7. Web ブラウザは、URL で使用されているサーバの名前 (myserver など) がデジタル証明書の名前と一致すること、そしてデジタル証明書が信頼できる第三者 (信頼性のある CA) によって発行されたものであることをチェックします。

  8. 双方向 SSL 認証を使用するよう設定されている場合、サーバはクライアントのデジタル証明書を要求します。

    注意: Web サーバ プロキシ プラグインとの完全な双方向 SSL ハンドシェークを実施するように WebLogic Server でコンフィグレーションできなくても、プロキシ プラグインは必要に応じてサーバにクライアント証明書を提供するようにコンフィグレーションできます。 そのためには、WebLogic Server への HTTP ヘッダでクライアント証明書をエクスポートするようにプロキシ プラグインをコンフィグレーションします。 WebLogic Server にクライアント証明書をエクスポートするようにプロキシ プラグインをコンフィグレーションする方法については、『WebLogic Server における Web サーバ プラグインの使い方』の特定プラグインのコンフィグレーション情報を参照してください。

  9. Web サーバは、リクエストを Web サーバ プラグインに転送します。 セキュアなプロキシが設定されていれば (HTTPS プロトコルが使用されている場合には設定されている)、Web サーバ プラグインはまた、HTTPS プロトコルを介して、ユーザから受け取った認証データ (ユーザ名とパスワード) と一緒にリクエストを WebLogic Server の WebLogic リソースに送信することによって認証を実行します。

    注意: 双方向 SSL 認証を使用していれば、クライアントの証明書に基づいて ID アサーションを行うようにサーバをコンフィグレーションすることもできます。この場合、ユーザ名とパスワードを供給するのではなく、サーバはクライアントの証明書からユーザ名とパスワードを取り出します。

  10. 認証が正常に行われると、WebLogic Server は処理を続行してユーザが WebLogic リソースへのアクセスを認可されているかどうかを判定します。

  11. WebLogic リソースに対してメソッドを呼び出す前に、サーバはセキュリティ認可チェックを実行します。 サーバは、このチェックで、ユーザの資格をセキュリティ コンテキストから取り出し、ユーザのセキュリティ ロールを判定し、そのユーザのセキュリティ ロールを、要求された WebLogic リソースのセキュリティ ポリシーと照らし合わせて、ユーザが WebLogic リソースに対してメソッドを呼び出す権限があることを確認します。

  12. 認可が成功すると、サーバがリクエストを遂行します。

詳細については、以下のマニュアルを参照してください。

 


複数の Web アプリケーション、クッキー、および認証

デフォルトでは、WebLogic Server はすべての Web アプリケーションに同じクッキー名 (JSESSIONID) を割り当てます。 どの種類の認証を使用する場合でも、同じクッキー名を使用する Web アプリケーションでは、認証用にシングル サインオンを使用します。ユーザが認証されると、その認証は、同じクッキー名を使用するすべての Web アプリケーションへのリクエストに対して有効になります。ユーザは再び認証を要求されることはありません。

Web アプリケーションごとに個別の認証が必要な場合は、Web アプリケーションにユニークなクッキー名またはクッキー パスを指定できます。CookieName パラメータでクッキー名を指定し、CookiePath パラメータでクッキー パスを指定します。これらのパラメータは、<session-descriptor> 要素の WebLogic 固有のデプロイメント記述子 weblogic.xml で定義されています。詳細については、『Web アプリケーションのアセンブルとコンフィグレーション』の「session-descriptor 要素」を参照してください。

クッキー名を保持しつつ Web アプリケーションごとに別々の認証が必要な場合は、Web アプリケーションごとにクッキー パラメータ (CookiePath) を変えることができます。

サービス パック 3 では、セッション データを失うことなく、HTTP を使用して開始されたセッションで HTTPS リソースにユーザが安全にアクセスできるようにする新機能が追加されました。 この新機能を有効にするには、config.xmlWebServer 要素に AuthCookieEnabled="true" を追加します。

<WebServer Name="myserver" AuthCookieEnabled="true"/> 

AuthCookieEnabledtrue に設定すると、HTTPS 接続を介して認証するときに、WebLogic Server インスタンスはブラウザに新しいセキュアなクッキーを送信します。 一度セキュアなクッキーを設定すると、セッションはクッキーがブラウザから送信された場合しかセキュリティ制約のある他の HTTPS リソースにアクセスできません。

注意: 普通の HTTP で認証する場合、HTTPS リソースでセキュアなクッキーは設定されず、必要ともされません。 保護されていない HTTPS リソースにアクセスする場合、クッキーは検証されません (ブラウザから送信されないため)。 このため、ブラウザはユーザのログインなしで保護されていない HTTPs リソースにアクセスできます。

 


セキュアな Web アプリケーションの開発

WebLogic Server は、Web ブラウザに関して以下の 3 タイプの認証をサポートしています。

以降の節では、次のトピックについて説明します。

BASIC 認証 Web アプリケーションの開発

BASIC 認証の場合、Web ブラウザは WebLogic リソースの要求に応じてログイン画面を表示します。 そのログイン画面は、ユーザ名とパスワードの入力をユーザに要求します。 図 2-2 は典型的なログイン画面です。

図2-2 BASIC 認証のログイン画面


 

BASIC 認証を提供する Web アプリケーションを開発するには、次の手順を行います。

  1. web.xml デプロイメント記述子を作成します。 このファイルでは、以下の情報を定義します (リスト2-1 を参照)。

    1. ウエルカム ファイルを定義します。ウエルカム ファイルの名前は welcome.jsp です。

    2. 保護する予定の Web アプリケーション リソース、つまり URL リソースの各セットについてセキュリティ制約を定義します。リソースの各セットは共通の URL を共有します。 HTML ページ、JSP、サーブレットなどは最も一般的に保護される URL リソースですが、他のタイプの URL リソースもサポートされています。 リスト2-1 では、URL パターンは Web アプリケーションの最上位ディレクトリに位置する welcome.jsp ファイルを指しており、URL リソースへのアクセスが許可される HTTP メソッドは POST と GET、セキュリティ ロールは webuser (<auth-constraint> で指定) となっています。

    注意: <auth-constraint> タグは、正確に理解し使用してください。そうしないと、必要な保護をアーカイブできません。 <auth-constraint> タグの詳細については、auth-constraintを参照してください。 セキュリティ ロール名を指定する場合、以下の規約と制限に従ってください。

    - セキュリティ ロール名の適切な構文は、Web 上 (http://www.w3.org/TR/REC-xml#NT-Nmtoken) で閲覧可能な XML (Extensible Markup Language) 勧告で Nmtoken に関して定義されているとおりです。

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

    - セキュリティ ロール名では大文字/小文字を区別します。

    - BEA が提唱する命名規約では、セキュリティ ロール名は単数形です。

    1. 使用する認証のタイプとセキュリティ制約が適用されるセキュリティ レルムの定義には <login-config> を使用します。 リスト2-1 ではBASIC タイプが指定されており、レルムはデフォルトのレルムとなっています。つまり、セキュリティ制約は WebLogic Server インスタンスの起動時にアクティブなセキュリティ レルムに適用されます。

    注意: WebLogic Server のこのリリースでは、<login-config> タグおよび <realm-name> サブタグで定義されたレルム名は無視されます。

    1. 1 つまたは複数のセキュリティ ロールを定義し、それらをセキュリティ制約にマップします。 サンプルでは、セキュリティ制約で定義されているセキュリティ ロールは webuser 1 つだけなので、定義されているセキュリティ ロール名は 1 つだけです (リスト2-1 の <security-role> タグを参照)。ただし、セキュリティ ロールは必要なだけ定義できます。

コード リスト 2-1 BASIC 認証の web.xml ファイル

<!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>
<welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>
          <security-constraint>
<web-resource-collection>
<web-resource-name>Success</web-resource-name>
<url-pattern>/welcome.jsp</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>webuser</role-name>
</auth-constraint>
</security-constraint>
          <login-config>
<auth-method>BASIC</auth-method>
<realm-name>default</realm-name>
</login-config>
           <security-role>
<role-name>webuser</role-name>
</security-role>
</web-app>

  1. weblogic.xml デプロイメント記述子を作成します。 このファイルでは、セキュリティ ロール名をユーザおよびグループにマップします。 リスト2-2 は、対となる web.xml ファイルの <security-role> タグで定義されている webuser セキュリティ ロールを myGroup という名前のグループにマップするサンプルの weblogic.xml ファイルです。 プリンシパルは、ユーザにもグループにもできるため、<principal-tag> はどちらにも使用できます。このコンフィグレーションでは、WebLogic Server は myGroup のユーザだけに保護されている URL リソース welcome.jsp へアクセスすることを許可します。ただし、Administration Console を使用すると、他のグループも保護リソースへのアクセスが許可されるように Web アプリケーションのセキュリティ ロールを修正できます。

    注意: weblogic.xml デプロイメント記述子の作成は省略可能です。 このファイルを含めなかった場合、またはファイルを含めたがすべてのセキュリティ ロールのマッピングは含めなかった場合、マップされていないセキュリティ ロールはすべてデフォルトで、ロール名に一致する名前を持つユーザまたはグループに設定されます。 たとえば、セキュリティ ロールに「SampleTester」という名前を付けると、「SampleTester」という名前を持つユーザまたはグループがそのセキュリティ ロールに含まれます。

コード リスト 2-2 BASIC 認証の weblogic.xml ファイル

<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 7.0//EN"
"http://www.bea.com/servers/wls700/dtd/weblogic700-web-jar.dtd">
<weblogic-web-app>
     <security-role-assignment>
<role-name>webuser</role-name>
<principal-name>myGroup</principal-name>
</security-role-assignment>
</weblogic-web-app>

  1. ユーザがユーザ名とパスワードを入力してアクセス権を付与されたときに表示されるウエルカム画面を生成するファイルを作成します。リスト2-3 は、サンプルの welcome.jsp ファイルを示します。図 2-3 は、ウエルカム画面を示します。

コード リスト 2-3 BASIC 認証の welcome.jsp ファイル

<html>
<head>
<title>Browser Based Authentication Example Welcome Page</title>
</head>
<h1> Browser Based Authentication Example Welcome Page </h1>
  <p> Welcome <%= request.getRemoteUser() %>!
  </blockquote>
</body>
</html>

注意: リスト2-3 において、JSP がログインしたユーザの名前を取得するために API (request.getRemoteUser()) を呼び出していることに留意してください。 代わりに、別の API weblogic.security.Security.getCurrentSubject() を使用することもできます。

図2-3 ウエルカム画面


 

  1. WebLogic Server を起動し、URL リソースにアクセス可能なユーザおよびグループを定義します。 weblogic.xml ファイル (リスト2-2) では、<principal-name> タグで、welcome.jsp にアクセス可能なグループとして myGroup が定義されています。したがって、Administration Console を使用して myGroup グループを定義し、ユーザを定義して、そのユーザを myGroup グループに追加します。 ユーザおよびグループの追加については、『WebLogic リソースのセキュリティ』の「ユーザとグループ」を参照してください。

  2. Web アプリケーションをデプロイし、前の手順で定義したユーザを使用して保護 URL リソースにアクセスします。

    1. デプロイメントの手順については、 2-26 ページの「Web アプリケーションのデプロイメント」を参照してください。

    2. Web ブラウザを開き、次の URL を入力します。

      http://localhost:7001/basicauth/welcome.jsp

    3. ユーザ名とパスワードを入力します。ウエルカム画面が表示されます。

FORM 認証 Web アプリケーションの開発

Web アプリケーションで FORM 認証を使用する場合は、Web アプリケーション リソースの要求に応じて Web ブラウザが表示するカスタム ログイン画面とログインが失敗した場合に表示されるエラー画面を用意します。ログイン画面は HTML ページ、JSP またはサーブレットを使用して生成できます。 フォームベースのログインのメリットは、これらの画面を完全に管理できるので、アプリケーションまたは会社の方針/ガイドラインの要件にあわせてそれらを設計できることです。

そのログイン画面は、ユーザ名とパスワードの入力をユーザに要求します。 図 2-4 は、JSP を使用して生成される典型的なログイン画面を、リスト2-4 はソース コードを示します。

図2-4 フォームベースのログイン画面 (login.jsp)


 


 

コード リスト 2-4 フォームベースのログイン画面のソース コード (login.jsp)

<html>
<head>)
<title>Security WebApp login page</title>
</head>
<body bgcolor="#cccccc">
<blockquote>
<img src=BEA_Button_Final_web.gif align=right>
<h2>Please enter your user name and password:</h2>
<p>
<form method="POST" action="j_security_check">
<table border=1>
<tr>
<td>Username:</td>
<td><input type="text" name="j_username"></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="j_password"></td>
</tr>
<tr>
<td colspan=2 align=right><input type=submit
value="Submit"></td>
</tr>
</table>
</form>
</blockquote>
</body>
</html>

図 2-5 は、HTML を使用して生成される典型的なログイン エラー画面を、リスト2-5 はソース コードを示します。

図2-5 ログイン エラー画面


 

コード リスト 2-5 ログイン エラー画面ソース コード

<html>
<head>
<title>Login failed</title>
</head>
<body bgcolor=#ffffff>
<blockquote>
<img src=/security/BEA_Button_Final_web.gif align=right>
<h2>Sorry, your user name and password were not recognized.</h2>
<p><b>
<a href="/security/welcome.jsp">Return to welcome page</a> or
<a href="/security/logout.jsp">logout</a>
</b>
</blockquote>
</body>
</html>

FORM 認証を提供する Web アプリケーションを開発するには、次の手順を行います。

  1. web.xml デプロイメント記述子を作成します。 このファイルでは、以下の情報を定義します (リスト2-6 を参照)。

    1. ウエルカム ファイルを定義します。ウエルカム ファイルの名前は welcome.jsp です。

    2. 保護する予定の Web アプリケーション リソース、つまり URL リソースの各セットについてセキュリティ制約を定義します。 URL リソースの各セットは共通の URL を共有します。 HTML ページ、JSP、サーブレットなどは最も一般的に保護される URL リソースですが、他のタイプの URL リソースもサポートされています。 リスト2-6 では、URL パターンは /admin/edit.jsp を指しており (したがって、Web アプリケーションの admin サブディレクトリに配置された edit.jsp ファイルが保護される)、URL リソースへのアクセスが許可される HTTP メソッド (GET) が定義され、セキュリティ ロール名 admin (<auth-constraint> タグで指定) が定義されています。

    注意: <auth-constraint> タグは、正確に理解し使用してください。そうしないと、必要な保護をアーカイブできません。 <auth-constraint> タグの詳細については、auth-constraintを参照してください。 セキュリティ ロール名を指定する場合、以下の規約と制限に従ってください。

    - セキュリティ ロール名の適切な構文は、Web 上 (http://www.w3.org/TR/REC-xml#NT-Nmtoken) で閲覧可能な XML (Extensible Markup Language) 勧告で Nmtoken に関して定義されているとおりです。

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

    - セキュリティ ロール名では大文字/小文字を区別します。

    - BEA が提唱する命名規約では、セキュリティ ロール名は単数形です。

    1. 使用する認証のタイプとセキュリティ制約が適用されるセキュリティ レルムを定義します。この場合は、FORM タイプが指定されており、レルムは指定されていないのでデフォルトのレルムになります。つまり、セキュリティ制約は WebLogic Server インスタンスの起動時にアクティブなセキュリティ レルムに適用されます。

    2. 1 つまたは複数のセキュリティ ロールを定義し、それらをセキュリティ制約にマップします。サンプルでは、1 つのセキュリティ ロール admin のみがセキュリティ制約で定義されているので、ここでは 1 つのセキュリティ ロール名のみ定義されています。ただし、セキュリティ ロールは必要なだけ定義できます。

コード リスト 2-6 FORM 認証の web.xml ファイル

<!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>
    <welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>
    <security-constraint>
<web-resource-collection>
<web-resource-name>AdminPages</web-resource-name>
<description>
These pages are only accessible by authorized
administrators.
</description>
<url-pattern>/admin/edit.jsp</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description>
These are the roles who have access.
</description>
<role-name>
admin
</role-name>
</auth-constraint>
<user-data-constraint>
<description>
This is how the user data must be transmitted.
</description>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
    <login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/fail_login.html</form-error-page>
</form-login-config>
</login-config>
    <security-role>
<description>
An administrator
</description>
<role-name>
admin
</role-name>
</security-role>
</web-app>

  1. weblogic.xml デプロイメント記述子を作成します。 このファイルでは、セキュリティ ロール名をユーザおよびグループにマップします。 リスト2-7 は、対となる web.xml ファイルの <security-role> タグで定義されている admin セキュリティ ロールをグループ supportGroup にマッピングするサンプルの weblogic.xml ファイルです。 このコンフィグレーションの場合、WebLogic Server は supportGroup グループのユーザのみに保護 WebLogic リソースへのアクセスを許可します。 ただし、Administration Console を使用すると、他のグループも保護 WebLogic リソースへのアクセスが許可されるように Web アプリケーションのセキュリティ ロールを修正できます。

コード リスト 2-7 FORM 認証の weblogic.xml ファイル

<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 7.0//EN"
"http://www.bea.com/servers/wls700/dtd/weblogic700-web-jar.dtd">
<weblogic-web-app>
     <security-role-assignment>
<role-name>admin</role-name>
<principal-name>supportGroup</principal-name>
</security-role-assignment>
</weblogic-web-app>

  1. ユーザが URL を入力して保護 Web アプリケーション リソースを要求したときにウエルカム画面を生成する Web アプリケーション ファイルを作成します。 リスト2-8 はサンプルの welcome.jsp ファイルです。 図 2-3 はウエルカム画面です。

コード リスト 2-8 FORM 認証の welcome.jsp ファイル

<html>
<head>
<title>Security login example</title>
</head>
  <%
String bgcolor;
if ((bgcolor=(String)application.getAttribute("Background")) ==
null)
{
bgcolor="#cccccc";
}
%>
  <body bgcolor=<%="¥""+bgcolor+"¥""%>> 
  <blockquote>
<img src=BEA_Button_Final_web.gif align=right>
<h1> Security Login Example </h1>
  <p> Welcome <%= request.getRemoteUser() %>! 
  <p> If you are an administrator, you can configure the background 
color of the Web Application.
<br> <b><a href="admin/edit.jsp">Configure background</a></b>.
  <% if (request.getRemoteUser() != null) { %>
<p> Click here to <a href="logout.jsp">logout</a>.
<% } %>
  </blockquote>
</body>
</html>

注意: リスト2-8 において、JSP がログインしたユーザの名前を取得するために API (request.getRemoteUser()) を呼び出していることに留意してください。 代わりに、別の API weblogic.security.Security.getCurrentSubject() を使用することもできます。

  1. WebLogic Server を起動し、URL リソースにアクセス可能なユーザおよびグループを定義します。weblogic.xml ファイル (リスト2-7) では、<role-name> タグで adminedit.jsp ファイルにアクセス可能なグループとして定義され、ユーザ joe がそのグループのメンバーとして定義されています。 したがって、Administration Console を使用して admin グループを定義し、ユーザ joe を定義して、joeadmin グループに追加します。 他のユーザを定義してグループに追加することもでき、その追加ユーザも保護 WebLogic リソースにアクセスすることができます。 ユーザおよびグループの追加については、『WebLogic リソースのセキュリティ』の「ユーザとグループ」を参照してください。

  2. Web アプリケーションをデプロイし、前の手順で定義したユーザを使用して保護 Web アプリケーション リソースにアクセスします。

    1. デプロイメントの手順については、 2-26 ページの「Web アプリケーションのデプロイメント」を参照してください。

    2. Web ブラウザを開き、次の URL を入力します。

      http://hostname:7001/security/welcome.jsp

    3. ユーザ名とパスワードを入力します。ウエルカム画面が表示されます。

ID アサーションを使用した Web アプリケーションの認証

Web アプリケーションで ID アサーションを使用すると、認証を目的にクライアントの ID を検証できます。 ID アサーションを使用するときには、以下の要件を満たす必要があります。

  1. 認証タイプを CLIENT-CERT に設定する必要があります。

  2. サーバに ID アサーション プロバイダがコンフィグレーションされている必要があります。 Web ブラウザまたは Java クライアントがセキュリティ ポリシーで保護された WebLogic Server リソースを要求する場合、WebLogic Server は Web ブラウザまたは Java クライアントが ID を持つことを要求します。 WebLogic ID アサーション プロバイダは、Web ブラウザまたは Java クライアントからのトークンを WebLogic Server セキュリティ レルムのユーザに対応付けます。 ID アサーション プロバイダのコンフィグレーション方法については、「WebLogic ID アサーション プロバイダのコンフィグレーション」を参照してください。

  3. トークンの値に対応するユーザは、サーバのセキュリティ レルムで定義されている必要があります。定義されていないと、クライアントは保護されている WebLogic リソースにアクセスできません。 サーバ上のユーザの詳細については、『WebLogic リソースのセキュリティ』の「ユーザの作成」を参照してください。

双方向 SSL を使用した Web アプリケーションの認証

Web アプリケーションで双方向 SSL を使用すると、クライアントがその主張どおりの存在であることを検証できます。 双方向 SSL を使用するときには、以下の要件を満たす必要があります。

  1. 認証タイプを CLIENT-CERT に設定する必要があります。

  2. サーバを双方向 SSL 向けにコンフィグレーションする必要があります。SSL とデジタル証明書の使用については、Java クライアントでの SSL 認証の使用を参照してください。 サーバの SSL コンフィグレーションの詳細については、『WebLogic Security の管理』の「SSL のコンフィグレーション」を参照してください。

  3. クライアントは、サーバの Web アプリケーションにアクセスするために HTTPS を使用する必要があります。

  4. サーバに ID アサーション プロバイダがコンフィグレーションされている必要があります。 Web ブラウザまたは Java クライアントがセキュリティ ポリシーで保護された WebLogic Server リソースを要求する場合、WebLogic Server は Web ブラウザまたは Java クライアントが ID を持つことを要求します。 WebLogic ID アサーション プロバイダを使用すると、Web ブラウザまたは Java クライアントのデジタル証明書を WebLogic Server セキュリティ レルム内のユーザにマップするユーザ名マッパーをサーバで使用できます。 ID アサーション プロバイダとユーザ名マッパーの使い方については、『WebLogic Security の管理』の「WebLogic ID アサーション プロバイダのコンフィグレーション」および「WebLogic ID アサーション プロバイダでのユーザ名マッパーの使用」を参照してください。

  5. クライアントのデジタル証明書の Subject's Distinguished Name (SubjectDN) 属性に対応するユーザは、サーバのセキュリティ レルムで定義されている必要があります。定義されていないと、クライアントには保護された WebLogic リソースへのアクセスが許可されません。 サーバ上のユーザの詳細については、『WebLogic リソースのセキュリティ』の「ユーザの作成」を参照してください。

注意: SSL 認証を使用する場合、サーバの SSL コンフィグレーションを Administration Console で指定するので、web.xml および weblogic.xml ファイルを使用してサーバのコンフィグレーションを指定する必要はありません。 サーバの SSL コンフィグレーションの詳細については、『WebLogic Security の管理』の「SSL のコンフィグレーション」を参照してください。

Swing ベース認証 Web アプリケーションの開発

Web ブラウザでは、Swing コンポーネントを使用して開発されたグラフィカル ユーザ インタフェース (GUI) を操作することもできます。 Java Foundation Classes (JFC) の一部である Swing コンポーネントは、JDK 1.1 または Java 2 プラットフォームで使用できます。

Swing コンポーネントを使用してアプリケーションおよびアプレットのグラフィカル ユーザ インタフェース (GUI) を作成する方法については、Sun Microsystems, Inc. 作成の「Creating a GUI with JFC/Swing」チュートリアル (Swing チュートリアルとも呼ばれる) を参照してください。 このチュートリアルは、http://java.sun.com/docs/books/tutorial/uiswing/ でアクセスできます。

Swing ベースの GUI を開発したら、FORM 認証 Web アプリケーションの開発を参照し、Swing ベースの画面を使用して、FORM 認証を提供する Web アプリケーションの開発に必要な手順を実行します。

注意: Swing ベースの GUI を開発する場合、swing イベント スレッドの子スレッドに Java 仮想マシン全体のユーザを使用しないでください。 これは J2EE に準拠していないので、通常はシン クライアントや IIOP では動作しません。 代わりに、以下のいずれかの方法を用います。

Web アプリケーションのデプロイメント

開発モードで動作しているサーバに Web アプリケーションをデプロイするには、次の手順を行います。

注意: 開発モードまたはプロダクション モードでの Web アプリケーションのデプロイの詳細については、『Web アプリケーションのアセンブルとコンフィグレーション』の「Web アプリケーションのデプロイメント」を参照してください。

  1. Web アプリケーションのファイルのディレクトリ構造を構築します。 図 2-6 は、basicauth という Web アプリケーションのディレクトリ構造です。 最上位ディレクトリには Web アプリケーションの名前を割り当て、サブディレクトリは WEB-INF という名前にする必要があります。

    図2-6 Basicauth Web アプリケーションのディレクトリ構造


     

  2. Java アーカイブ (jar) 形式ではなく、展開ディレクトリ形式の Web アプリケーションをデプロイするには、ただ単純にディレクトリをサーバ上の applications ディレクトリに移動します。たとえば、basicauth Web アプリケーションは次の位置にデプロイします。

    WL_HOME¥user_projects¥mydomain¥applications¥basicauth

    WebLogic Server インスタンスが動作している場合、アプリケーションは自動デプロイされるはずです。Administration Console を使用すると、アプリケーションがデプロイされたことを確認できます。

    WebLogic Server インスタンスが動作していない場合は、サーバを起動すると Web アプリケーションは自動デプロイされます。

  3. まだしていない場合は、Administration Console を使用して、Web アプリケーションにアクセスできるユーザおよびグループをコンフィグレーションします。保護 WebLogic リソースへのアクセスを許可されるユーザおよびグループを判別するには、weblogic.xml ファイルを調べます。たとえば、basicauth サンプルの weblogic.xml ファイル (リスト2-2) では、myGroupwelcome.jsp ファイルにアクセスできる唯一のグループとして定義されています。

セキュアな Web アプリケーションのデプロイの詳細については、『Web アプリケーションのアセンブルとコンフィグレーション』の「Web アプリケーションのデプロイメント」を参照してください。

 


Web アプリケーションでの宣言によるセキュリティの使用

Web アプリケーションに宣言によってセキュリティを実装するには、デプロイメント記述子 (web.xml および weblogic.xml) を使用してセキュリティ要件を定義します。デプロイメント記述子は、アプリケーションの論理的なセキュリティ要件を実行時の定義にマップします。また、実行時には、サーブレット コンテナがセキュリティ定義を使って、要件を実施します。

デプロイメント記述子を使用した簡単な Web アプリケーションでのセキュリティのコンフィグレーションについては、セキュアな Web アプリケーションの開発を参照してください。

セキュリティ関連のデプロイメント記述子については、Web アプリケーションのセキュリティ関連のデプロイメント記述子を参照してください。

Administration Console を使用して Web アプリケーションのセキュリティをコンフィグレーションする方法については、『WebLogic リソースのセキュリティ』を参照してください。

 


Web アプリケーションのセキュリティ関連のデプロイメント記述子

以下のトピックでは、Web アプリケーションのセキュリティ要件を定義するために web.xml および weblogic.xml ファイルで使用されるデプロイメント記述子の要素について説明します。

web.xml デプロイメント記述子

以下の web.xml のセキュリティ関連のデプロイメント記述子の要素は、WebLogic Server でセキュリティ要件を定義するために使用されます。

この節の情報は、Sun Microsystems, Inc. 提供の web.xml の文書型記述子 (DTD) に基づいています。 web.xml の DTD は、http://java.sun.com/dtd/web-app_2_3.dtd にあります。

auth-constraint

省略可能な auth-constraint 要素では、このセキュリティ制約で定義された Web リソースの集合にアクセスするグループまたはプリンシパルを定義します。

注意: 認可制約 (<auth-constraint> タグで定義) は、認証の要件を確立し、制約されたリクエストの実行を許可された認証ロール (セキュリティ ロール) を指定します。 <auth-constraint> タグを使用して認可制約を定義する場合は、以下の点に注意してください。

以下の例は、<auth-constraint> タグの使い方を示しています。

<auth-constraint> タグの詳しい使い方については、http://jcp.org/aboutJava/communityprocess/final/jsr154/index.html の Java サーブレット仕様バージョン 2.4 を参照してください。

次の表では、auth-constraint 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<description>

省略可能

このセキュリティ制約の説明文。

<role-name>

省略可能

このセキュリティ制約で定義されたリソースにアクセスできるセキュリティ ロールを定義する。 セキュリティ ロール名は、security-role-ref 要素を使用してプリンシパルにマップされる。security-role-refを参照。

使用する場所

auth-constraint 要素は、security-constraint 要素内で使用されます。

例 1 : <auth-constraint> タグなしで <security-constraint> タグを使用する

リスト2-9 は、検証および保護されないリソースを示しています。 この場合、<auth-constraint> タグが使用されないので、リソースは検証および保護されません。 このタイプの保護はすべてが保護される ("/*") 場合は便利ですが、静的なファイルまたは画像への自由なアクセスを許可することも必要です。

コード リスト 2-9 ケース 1 : 検証および保護されないリソース

<security-constraint>
<web-resource-collection>
<web-resource-name>Unchecked-Resource</web-resource-name>
<url-pattern>/foo/*</url-pattern>
</web-resource-collection>
</security-constraint>

例 2 : ロールを指定せずに <auth-constraint> タグを使用する

リスト2-10 では、ロールを指定しない <auth-constraint> タグが使用されています (したがって、リソースには誰もアクセスできない)。 このように <auth-constraint> タグを使用するのは、リソースへのダイレクトなアクセスを避ける場合には便利ですが、forwardsincludesservletContext.getResource()getResourceAsStream() によるアクセスは許可する必要があります。

注意: このように <auth-constraint> タグを使用する代替手段として、リソースを WEB-INF ディレクトリに配置することもできます。このディレクトリに配置されたリソースへのダイレクトなアクセス リクエストを WebLogic Server は許可しません。

コード リスト 2-10 ロールが指定されない <auth-constraint> タグ

  <security-constraint>
<web-resource-collection>
<web-resource-name>Excluded-Resource</web-resource-name>
<url-pattern>/foo/*</url-pattern>
</web-resource-collection>
<auth-constraint>
</auth-constraint>
</security-constraint>

例 3 : ロールを指定して <auth-constraint> タグを使用する

リスト2-11 では、ロールを指定して <auth-constraint> タグが使用されています。 この場合は、リソースが検証および保護され、adminrole ロールのユーザのみアクセスできるようになります。

コード リスト 2-11 ロールが指定された <auth-constraint> タグ

  <security-constraint>
<web-resource-collection>
<web-resource-name>Checked-Resource</web-resource-name>
<url-pattern>/blah/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>adminrole</role-name>
</auth-constraint>
</security-constraint>

security-constraint

security-constraint 要素は、web-resource-collection 要素で定義されたリソースの集合へのアクセス特権を定義するために web.xml ファイルで使用されます。

次の表では、security-constraint 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<web-resource-
collection>

必須

このセキュリティ制約が適用される Web アプリケーションのコンポーネントを定義する。 詳細については、web-resource-collectionを参照。

<auth-constraint>

省略可能

このセキュリティ制約で定義される Web リソースの集合にアクセスするグループまたはプリンシパルを定義する。詳細については、auth-constraintを参照。

<user-data-
constraint>

省略可能

クライアントとサーバ間でやり取りされるデータの保護方法を定義する。 詳細については、user-data-constraintを参照。

リスト2-12 は、web.xml ファイルで security-constraint 要素を使用して SecureOrdersEast のセキュリティを定義する方法を示しています。

コード リスト 2-12 セキュリティ制約の例

web.xml entries:
<security-constraint>
<web-resource-collection>
<web-resource-name>SecureOrdersEast</web-resource-name>
<description>
Security constraint for
resources in the orders/east directory
</description>
<url-pattern>/orders/east/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<description>
constraint for east coast sales
</description>
<role-name>east</role-name>
<role-name>manager</role-name>
</auth-constraint>
<user-data-constraint>
<description>SSL not required</description>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
...

security-role

security-role 要素には、セキュリティ ロールの定義が指定されます。 定義は、セキュリティ ロールの説明 (省略可能) とセキュリティ ロール名から成ります。

次の表では、security-role 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<description>

省略可能

セキュリティ ロールの説明文。

<role-name>

必須

ロール名。 ここで使用する名前は、WebLogic 固有のデプロイメント記述子 weblogic.xml で対応するエントリが必要になる。weblogic.xml によって、ロールはセキュリティ レルム内のプリンシパルにマップされる。 詳細については、security-role-assignmentを参照。

web.xml ファイルでの security-role 要素の使用例については、リスト2-1 を参照してください。

security-role-ref

security-role-ref 要素は、<security-role> で定義されたセキュリティ ロール名を、サーブレットのロジックでハード コード化される代替ロール名にリンクします。 この特別な抽象化レイヤによって、サーブレット コードを変更しなくてもデプロイメント時にサーブレットをコンフィグレーションできるようになります。

次の表では、security-role-ref 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<description>

省略可能

ロールの説明文。

<role-name>

必須

サーブレット コード内で使用されるセキュリティ ロールまたはプリンシパルの名前を定義する。

<role-link>

必須

後にデプロイメント記述子内の <security-role> 要素で定義されるセキュリティ ロールの名前を定義する。

web.xml ファイルでの security-role-ref 要素の使用例については、リスト2-17 を参照してください。

user-data-constraint

user-data-constraint 要素は、クライアントとサーバ間でやり取りされるデータの保護方法を定義します。

次の表では、user-data-constraint 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<description>

省略可能

説明文。

<transport-
guarantee>

必須

クライアントとサーバ間でやり取りされるデータのセキュリティ要件を指定する。

指定できる値 :

  • NONE - 転送の保証が不要な場合に指定する。

  • INTEGRAL - クライアントとサーバ間で、転送中にデータが変更されない方法でデータを転送する必要がある場合に指定する。

  • CONFIDENTIAL - 転送中にデータの中味を覗かれないようにデータを転送する必要がある場合に指定する。

注意: INTEGRAL または CONFIDENTIAL の転送保証を使用してユーザが認証を受けた場合、WebLogic Server はセキュア ソケット レイヤ (SSL) 接続を確立する。

使用する場所

user-data-constraint 要素は、security-constraint 要素内で使用されます。

web.xml ファイルでの user-data-constraint 要素の使用例については、リスト2-12 を参照してください。

web-resource-collection

web-resource-collection 要素は、セキュリティ制約を適用する Web アプリケーションのリソースおよび HTTP メソッドのサブセットを識別するために使用されます。 HTTP メソッドが指定されていない場合、セキュリティ制約はすべての HTTP メソッドに適用されます。

次の表では、web-resource-collection 要素内で定義できる要素について説明します。

要素

必須/
省略可能

説明

<web-resource-name>

必須

Web リソースの集合の名前。

<description>

省略可能

Web リソースの説明文。

<url-pattern>

必須

Web リソースの集合のマッピング、つまり場所。

<http-method>

省略可能

クライアントが Web リソースの集合にアクセスしようとするときにセキュリティ制約を適用する HTTP メソッド。 HTTP メソッドが指定されていない場合、セキュリティ制約はすべての HTTP メソッドに適用される。

使用する場所

web-resource-collection 要素は、security-constraint 要素内で使用されます。

web.xml ファイルでの web-resource-collection 要素の使用例については、リスト2-12 を参照してください。

weblogic.xml デプロイメント記述子

以下の weblogic.xml のセキュリティ関連のデプロイメント記述子の要素は、WebLogic Server のセキュリティ要件を定義するために使用されます。

weblogic.xml デプロイメント記述子の詳細については、http://www.bea.com/servers/wls700/dtd/weblogic700-web-jar.dtd にある weblogic.xml の文書型記述子 (DTD) を参照してください。

global-role

WebLogic Server 7.0 SP1 以降では、Administration Console で指定するマッピングを、対となる web.xml ファイルの role-name 要素で定義した特定のセキュリティ ロールで使用することを明示的に示すために、global-role 要素を使用します。 この要素は、principal-name 要素の代わりに、プレースホルダとして使用されます。

global-role 要素を使用すると、特定の Web アプリケーションのデプロイメント記述子に定義されたセキュリティ ロールごとに特定のセキュリティ ロール マッピングを指定する必要がなくなります。代わりに、Administration Console を使用して定義済みの各ロールに対する特定のロール マッピングをいつでも指定および変更できます。 さらに、この要素は一部のアプリケーションに対して使用できるので、セキュリティ レルムの [一般] タブの [デプロイメント記述子内のセキュリティ データを無視] 属性を有効にする必要がありません。このため、同じセキュリティ レルムの中で、デプロイメント記述子を使用して一部のアプリケーションのセキュリティを指定および変更する一方、Administration Console を使用して他のアプリケーションのセキュリティを指定および変更できます。

注意: セキュリティ ロール名を指定する場合、以下の規約と制限に従ってください。

- セキュリティ ロール名の適切な構文は、Web 上 (http://www.w3.org/TR/REC-xml#NT-Nmtoken) で閲覧可能な XML (Extensible Markup Language) 勧告で Nmtoken に関して定義されているとおりです。

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

- セキュリティ ロール名では大文字/小文字を区別します。

- BEA が提唱する命名規約では、セキュリティ ロール名は単数形です。

使用する場所

global-role 要素は、security-role-assignment 要素内で使用されます。

リスト2-13リスト2-14 は、weblogic.xml ファイルでの global-role 要素の使い方を比較により示しています。 リスト2-14 では、weblogic-ejb-jar.xml 内の「webuser」の global-role 要素は、セキュリティが getReceipts メソッドにおいて正しくコンフィグレーションされるためには、Administration Console で webuser に対応するプリンシパルが作成される必要があることを意味します。

コード リスト 2-13 web.xml ファイルと weblogic.xml ファイルを使用したセキュリティ ロールとプリンシパルのセキュリティ レルムへのマップ

web.xml entries:
<web-app>
...
<security-role>
<role-name>webuser</role-name>
</security-role>
...
</web-app>
<weblogic.xml entries:
<weblogic-web-app>
     <security-role-assignment>
<role-name>webuser</role-name>
<principal-name>myGroup</principal-name>
<principal-name>Bill</principal-name>
<principal-name>Mary</principal-name>
</security-role-assignment>
</weblogic-web-app>

コード リスト 2-14 Web アプリケーションのデプロイメント記述子での global-role 要素の使い方

web.xml entries:
<web-app>
...
<security-role>
<role-name>webuser</role-name>
</security-role>
...
</web-app>
<weblogic.xml entries:
<weblogic-web-app>
     <security-role-assignment>
<role-name>webuser</role-name>
<global-role/>
</security-role-assignment>

Administration Console を使用して Web アプリケーションのセキュリティをコンフィグレーションする方法については、『WebLogic リソースのセキュリティ』を参照してください。

security-permission

security-permission 要素は、J2EE Sandbox と関連するセキュリティ パーミッションを指定します。

security-permission 要素の使用例については、リスト2-15 を参照してください。

security-permission-spec

security-permission-spec 要素は、セキュリティ ポリシー ファイル構文に基づいて単一のセキュリティ パーミッションを指定します。 Sun のセキュリティ パーミッション仕様の実装については、次の URL を参照してください。

http://java.sun.com/j2se/1.3/docs/guide/security/PolicyFiles.html#FileSyntax

注意: オプションの codebase および signedBy 句は無視してください。

使用する場所

security-permission-spec 要素は、security-permission 要素内で使用されます。

リスト2-15 は、security-permission-spec 要素を使用して java.net.SocketPermission クラスにパーミッションを付与する方法を示しています。

コード リスト 2-15 security-permission-spec 要素の例

<weblogic-web-app>
<security-permission>
<description>Optional explanation goes here</description>
<security-permission-spec>
<!-
http://java.sun.com/j2se/1.3/docs/guide/security/PolicyFiles.html#FileSyntax
の構文に準拠する、「codebase」句や「signedBy」句を含まない単一の grant 文をここに記述します。次に例を示します。
-->
grant {
permission java.net.SocketPermission "*", "resolve";
};
</security-permission-spec>
</security-permission>
</weblogic-web-app>

リスト2-15 では、permission java.net.SocketPermission はパーミッション クラス名を、"*" は対象名を、resolve (host/IP 名サービスのルックアップを解決する) はアクションを示します。

security-role-assignment

security-role-assignment 要素は、セキュリティ ロールと WebLogic Server セキュリティ レルムの 1 つまたは複数のプリンシパルとのマッピングを宣言します。

リスト2-16 は、security-role-assignment 要素を使用してプリンシパルを PayrollAdmin ロールに割り当てる方法を示しています。

コード リスト 2-16 security-role-assignment 要素の例

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

 


Web アプリケーションでのプログラムによるセキュリティの使用

サーブレットを記述して、そのサーブレット コードでプログラム的にユーザとセキュリティ ロールにアクセスできます。 そのためには、サーブレットのコードで javax.servlet.http.HttpServletRequest.getUserPrincipal および javax.servlet.http.HttpServletRequest.isUserInRole(String role) メソッドを使用します。

getUserPrincipal

getUserPrincipal() メソッドは、Web アプリケーションの現在のユーザを特定する場合に使用します。 このメソッドは、1 ユーザが存在する場合に WLSUser Principal を返します。 WLSUser Principal が複数の場合、メソッドは、Subject.getPrincipals().iterator() メソッドで指定された順序の 1 番目を返します。 WLSUser Principal が存在しない場合、getUserPrincipal() メソッドは WLSGroup Principal 以外の 1 番目を返します。 Principal が存在しない場合、またはすべての PrincipalWLSGroup タイプの場合、このメソッドは null を返します。 この動作は、weblogic.security.SubjectUtils.getUserPrincipal() メソッドのセマンティクスとまったく同じです。

getUserPrincipal() メソッドの使い方については、http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Security4.html を参照してください。

isUserInRole

javax.servlet.http.HttpServletRequest.isUserInRole(String role) メソッドは、認証済みのユーザに指定された論理的セキュリティ「ロール」が付与されているかどうかを示すブール値を返します。ユーザが認証されていない場合、このメソッドは false を返します。

isUserInRole() メソッドは、セキュリティ ロールをセキュリティ レルムのグループ名にマップします。 リスト2-17 は、対となる web.xml ファイルでセキュリティ ロールを定義するために <servlet> 要素とともに使用される要素を示しています。

コード リスト 2-17 IsUserInRole の web.xml および weblogic.xml の要素

Begin web.xml entries:
...
<servlet>
<security-role-ref>
<role-name>user-rolename</role-name>
<role-link>rolename-link</role-link>
</security-role-ref>
</servlet>
<security-role>
<role-name>rolename-link</role-name>
</security-role>
...
Begin weblogic.xml entries:
...
<security-role-assignment>
<role-name>rolename-link</role-name>
<principal-name>groupname</principal>
<principal-name>username</principal>
</security-role-assignment>
...

文字列 role は、対となる web.xml デプロイメント記述子の <servlet> 宣言の <security-role-ref> 要素の中にネストされた <role-name> 要素で提供される名前にマップされます。<role-name> 要素は、サーブレット コードで使用されるセキュリティ ロールまたはprincipal (ユーザまたはグループ) の名前を定義します。<role-link> 要素は、weblogic.xml デプロイメント記述子の <security-role-assignment> 要素で定義された <role-name> に対応します。

注意: セキュリティ ロール名を指定する場合、以下の規約と制限に従ってください。

- セキュリティ ロール名の適切な構文は、Web 上 (http://www.w3.org/TR/REC-xml#NT-Nmtoken) で閲覧可能な XML (Extensible Markup Language) 勧告で Nmtoken に関して定義されているとおりです。

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

- セキュリティ ロール名では大文字/小文字を区別します。

- BEA が提唱する命名規約では、セキュリティ ロール名は単数形です。

たとえば、クライアントが manager というセキュリティ ロールの Bill というユーザでログインに成功している場合、次のメソッドは true を返します。

request.isUserInRole("manager")

リスト2-18 に例を示します。

コード リスト 2-18 セキュリティ ロール マッピングの例

Servlet code: 
out.println("Is the user a Manager? " +
request.isUserInRole("manager"));
web.xml entries:
<servlet>
. . .
<role-name>
manager</role-name>
<role-link>
mgr</role-link>
. . .
</servlet>
<security-role>
<role-name>
mgr</role-name>
</security-role>
weblogic.xml entries:
<security-role-assignment>
<role-name>
mgr</role-name>
<principal-name>
bostonManagers</principal-name>
<principal-name>
Bill</principal-name>
<principal-name>
Ralph</principal-name>
</security-role-ref>

 


プログラムによる認証 API の使用

一部のアプリケーションでは、プログラムによる認証を使用するのが適切です。

WebLogic Server は、サーブレット アプリケーション内からプログラムによる認証をサポートするサーバサイド API を備えています。

weblogic.servlet.security.ServletAuthentication

この API を使用すると、ユーザを認証し、そのユーザをログインさせ、デフォルトの (アクティブな) セキュリティ レルムで登録されるように現行セッションと関連付けるサーブレット コードを記述できます。いったんログインが完了すると、標準のメカニズムを使用してログインしたかのように感じられます。

ServletAuthentication API と一緒に WebLogic が提供する weblogic.security.SimpleCallbackHandler クラスまたは weblogic.security.URLCallbackHandler クラスのうちいずれかを使用できます。 これらのクラスの詳細については、WebLogic クラスに関する Javadoc を参照してください。

リスト2-19 は、SimpleCallbackHandler を使用した例です。 リスト2-20 は、URLCallbackHandler を使用した例です。

コード リスト 2-19 SimpleCallbackHandler クラスを使用したプログラムによる認証コードの一部分

CallbackHandler handler = new SimpleCallbackHandler(username, password);
Subject mySubject = weblogic.security.services.Authentication.login(handler);
weblogic.servlet.security.ServletAuthentication.runAs(mySubject, request);
requesthttpservletrequest オブジェクト

コード リスト 2-20 URLCallbackHandler クラスを使用したプログラムによる認証コードの一部分

CallbackHandler handler = new URLCallbackHandler(username, password);
Subject mySubject = weblogic.security.services.Authentication.login(handler);
weblogic.servlet.security.ServletAuthentication.runAs(mySubject, request);
requesthttpservletrequest オブジェクト

 

Back to Top Previous Next