Web コンテナー内での JAX-RS アプリケーションの保護
使用可能なセキュリティー・サービスを Web コンテナーから使用して、REST (Representational State Transfer) リソースを保護することができます。ユーザー認証、トランスポート・セキュリティー、許可制御、およびユーザーからロールへのマッピング を定義する、各種のセキュリティー・メカニズムを構成することができます。
始める前に
適切にセキュリティー制約を定義するには、 ユーザーのアプリケーションおよびそのアプリケーションが公開する RESTful リソースについての 知識があることが重要です。この知識は、アプリケーション およびアプリケーションが公開する個々のリソースが必要とする、適切なセキュリティー・ロール を決定するのに役立ちます。
REST アプリケーションをどのように保護するのかを 示すため、このトピックでは AddressBookApp という名前の REST アプリケーション例を使用します。
<?xml version="1.0" encoding="UTF-8"?>
<!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 id="WebApp_1255468655347">
<display-name>Sample REST Web Application</display-name>
<servlet>
<servlet-name>AddressBookApp</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.AddressBookApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AddressBookApp</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
この例では、サーブレット・マッピング
は、REST リソースが /app_root_context/rest ディレクトリーの下で
処理されることを示しています。ここで、app_root_context は、アプリケーションの
インストール中に構成したものです。デフォルトのルート・コンテキストは / です。WebSphere Application Server に対してセキュリティーを使用可能にする必要があります。
このタスクについて
アプリケーション・サーバー環境で稼働する REST アプリケーションに認証および許可制約を適用するのに、Web コンテナーを使用できます。認証は、最小レベルのセキュリティーを必要とし、 それ以上のリソース保護は呼び出し側の ID によっては必要な場合もあるというような 業務 REST リソースにとっては、基本的なセキュリティー要件 です。
- ユーザーが HTTP 基本認証またはフォーム・ログインのいずれかを使用して、アプリケーション への認証を行うことを必要とする。
- REST リソースを起動するときにはトランスポートに SSL チャネルを使用するように、 アプリケーションを構成する。
- REST リソース・パターンにロール・ベースの許可制約を定義する。
- ユーザー ID およびロールを判定するために、アノテーション付き SecurityContext オブジェクトの プログラマチックな使用を実装する。
手順
タスクの結果
セキュリティー制約を定義した後は、アプリケーション内に定義された REST リソース へのアクセスには、ユーザー認証が成功することのみが条件に なります。さらに、ロール制約をさまざまなリソース URL パターンに適用した場合、 それらのリソースへのアクセスがロールに基づいて行われるようになります。
例
<web-app id="WebApp_1255468655347">
<display-name>Sample REST Web Application</display-name>
<servlet>
<servlet-name>AddressBookApp</servlet-name>
<servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.test.AddressBookApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AddressBookApp</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<security-constraint id="SecurityConstraint_1">
<web-resource-collection id="WebResourceCollection_1">
<web-resource-name>AddressBookApp</web-resource-name>
<description>Protection area for Rest Servlet</description>
<url-pattern>/rest/addresses</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint id="AuthConstraint_1">
<description>Role1 for this rest servlet</description>
<role-name>Role1</role-name>
</auth-constraint>
<user-data-constraint id="UserDataConstraint_1">
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint id="SecurityConstraint_2">
<web-resource-collection id="WebResourceCollection_2">
<web-resource-name>AddressBookApp</web-resource-name>
<description>Protection area for Rest Servlet</description>
<url-pattern>/rest/addresses/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint id="AuthConstraint_2">
<description>Role2 for this rest servlet</description>
<role-name>Role2</role-name>
</auth-constraint>
<user-data-constraint id="UserDataConstraint_1">
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-role id="SecurityRole_1">
<description>This is Role1</description>
<role-name>Role1</role-name>
</security-role>
<security-role id="SecurityRole_2">
<description>This is Role2</description>
<role-name>Role2</role-name>
</security-role>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/logon.jsp</form-login-page>
<form-error-page>/logonError.jsp</form-error-page>
</form-login-config>
</login-config>
</web-app>
次のタスク
管理コンソールを使用して、JAX-RS アプリケーションのセキュリティー を管理します。