WebLogic Web サービス プログラマーズ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

アクセス制御セキュリティのコンフィグレーション

この章では、Web サービス セキュリティをコンフィグレーションする方法について説明します。

 


アクセス制御セキュリティのコンフィグレーション : 主な手順

アクセス制御セキュリティとは、アクセスできるユーザを制御するように Web サービスをコンフィグレーションし、クライアントがオペレーションの 1 つを呼び出したときに Web サービスに対して HTTP/S またはユーザ名トークンを使用して自身を認証するようにクライアント アプリケーションをコーディングすることです。

Web サービスのアクセス制御セキュリティを指定するには、JWS ファイル内で、以下のアノテーションを 1 つ以上、使用します。

注意 : @weblogic.security.jws.SecurityRoles および @weblogic.security.jws.SecurityIdentity JWS アノテーションは、WebLogic Server 9.1 から非推奨となっています。

以下では、これらのアノテーションを使用してアクセス制御セキュリティを有効化する高度な手順について説明します。手順の詳細についてはこの章の後の節で説明します。

注意 : 次の手順では、WebLogic Web サービスを実装する JWS ファイルがすでに作成されていることを前提として、そのファイルをアクセス制御セキュリティの設定で更新します。また、Ant ビルド スクリプトを使用して Web サービスを反復的に開発することと、新しい情報で更新できる作業用の build.xml ファイルがあることも前提となっています。さらに、保護されていない Web サービスを呼び出すクライアント アプリケーションも用意されているものとします。これらの前提条件が満たされていない場合は、以下を参照してください。
  1. 必要に応じて、適切なレベル (クラスまたはオペレーション) で、@weblogic.jws.security.RolesAllowed@weblogic.jws.security.SecurityRole@weblogic.jws.security.RolesReferenced または @weblogic.jws.security.SecurityRoleRef アノテーションを追加し、JWS ファイルを更新します。
  2. セキュリティ関連アノテーションでの JWS ファイルの更新」を参照してください。

  3. 必要に応じて @weblogic.jws.security.RunAs JWS アノテーションを追加することで、WebLogic Server が実際に Web サービスを呼び出すユーザに割り当てられているロールではなく、特定のロールを使用して Web サービスを内部で実行することを指定します。
  4. @RunAs アノテーションでの JWS ファイルの更新」を参照してください。

  5. 必要に応じて @weblogic.jws.security.UserDataConstraint JWS アノテーションを追加することで、Web サービスが HTTPS を使用して呼び出し可能であること、または呼び出される必要があることを指定します。
  6. 詳細については、「アクセス制御セキュリティのコンフィグレーション : 主な手順」を参照してください。この節ではまた、SSL を使用するようにクライアント アプリケーションを更新する方法についても説明します。

  7. 通常の反復的な開発プロセスの一部として、Web サービスを再コンパイルして再デプロイします。
  8. WebLogic Web サービスの反復的な開発」を参照してください。

  9. Administration Console を使用し、有効な WebLogic Server ユーザが存在しなければ、それを作成します。ユーザのロールへのマッピングが外部で行われている場合は、さらに Administration Console を使用して @SecurityRole アノテーションで指定されているロールを作成し、ユーザをロールにマッピングします。
  10. 注意 : Web サービスを呼び出せるすべてのユーザがリストされるように、JWS ファイルで @SecurityRole アノテーションの mapToPrincipals 属性を指定していない場合、ユーザのロールへのマッピングは外部で定義されます。

    ユーザ、グループ、セキュリティ ロール」を参照してください。

  11. HttpTransportInfo WebLogic API を使用し、JAX-RPC Service オブジェクトの作成時に適切なユーザおよびパスワードを指定するよう、クライアント アプリケーションを更新します。
  12. JAX-RPC サービス オブジェクト作成時のユーザ名とパスワードの設定」を参照してください。

  13. build.xml ファイル内の clientgen Ant タスクを更新して、有効な WebLogic ユーザのユーザ名およびパスワード (Web サービスで @RolesAllowed アノテーションを使用する場合)、および WebLogic Server のものを含む信頼性のある証明書のリストが格納されたトラストストア (@UserDataConstraint を指定する場合) を指定します。
  14. これは以下のサンプルに示すように、clientgen Ant タスクに標準の Ant のネストされた要素である <sysproperty> を追加して、必要な Java プロパティに key 属性を設定することで指定できます。

    <clientgen
    wsdl="http://example.com/myapp/myservice.wsdl"
    destDir="/output/clientclasses"
    packageName="myapp.myservice.client"
    serviceName="StockQuoteService"
    <sysproperty key="javax.net.ssl.trustStore"
    value="/keystores/DemoTrust.jks"/>
    <sysproperty key="weblogic.wsee.client.ssl.stricthostchecking"
    value="false"/>
    <sysproperty key="javax.xml.rpc.security.auth.username"
    value="juliet"/>
    <sysproperty key="javax.xml.rpc.security.auth.password"
    value="secret"/>
    </clientgen>
  15. クライアントサイドのコンポーネントを再生成して、Java コードを通常どおりに再コンパイルします。

 


セキュリティ関連アノテーションでの JWS ファイルの更新

JWS ファイルで WebLogic 固有の @weblogic.jws.security.RolesAllowed アノテーションを使用し、Web サービスの呼び出しが許可されているロールをリストする @weblogic.jws.security.SecurityRoles アノテーションの配列を指定します。これら 2 つのアノテーションは、クラス レベルまたはメソッド レベルのいずれでも指定できます。クラスレベルで設定した場合、ロールはすべてのパブリック オペレーションに適用されます。このアノテーションをメソッド レベルで指定することで、特定のオペレーションにロールを追加できます。

@SecurityRole アノテーションには、以下の 2 つの属性があります。

@RolesAllowed アノテーションは、属性を持ちません。

また、@weblogic.jws.security.RolesReferenced アノテーションを使用して、既存のロールへの参照をリストする @weblogic.jws.security.SecurityRoleRef アノテーションの配列を指定することもできます。たとえば、ロール manager にすでに Web サービスの呼び出しが許可されている場合は、mgr ロールの manager ロールへのリンクを指定でき、mgr にマップされるユーザも Web サービスを呼び出せるようになります。これら 2 つのアノテーションは、クラス レベルのみで指定できます。

@SecurityRoleRef アノテーションには、以下の 2 つの属性があります。

@RolesReferenced アノテーションは、属性を持ちません。

次の例では、この節で説明されているアノテーションの JWS ファイルでの使い方を示します。該当する個所は太字で表示しています。

package examples.webservices.security_roles;
import javax.jws.WebMethod;
import javax.jws.WebService;
// WebLogic JWS アノテーション
import weblogic.jws.WLHttpTransport;
import weblogic.jws.security.RolesAllowed;
import weblogic.jws.security.RolesReferenced;
import weblogic.jws.security.SecurityRole;
import weblogic.jws.security.SecurityRoleRef;
@WebService(name="SecurityRolesPortType",
serviceName="SecurityRolesService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="security", 
serviceUri="SecurityRolesService",
portName="SecurityRolesPort")
@RolesAllowed (  {
@SecurityRole (role="manager",
mapToPrincipals={ "juliet","amanda" }),
@SecurityRole (role="vp")
} )
@RolesReferenced (
@SecurityRoleRef (role="mgr", link="manager")
)
/**
* この JWS ファイルは、1 つのオペレーション sayHello を含む簡単な
 * Java クラス実装の WebLogic Web サービスの基本となる
*
*/
public class SecurityRolesImpl {
  @WebMethod()
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
  }
}

この例では、managervp、および mgr ロールのみが、Web サービスの呼び出しを許可されると指定する方法を示しています。mgr ロールは、実際には manager ロールへの参照です。Web サービスのコンテキスト内で、ユーザ juliet および amandamanager ロールにマップされます。vp ロールにマップされるユーザがないので、WebLogic Server セキュリティ レルムを更新するためには、通常 Administration Console を使用して、外部でマッピングが行われることが前提です。

これらのアノテーションのリファレンス情報については、「JWS アノテーション リファレンス」を参照してください。

 


@RunAs アノテーションでの JWS ファイルの更新

Web サービスが常に特定のロールとして実行されることを指定するには、JWS ファイル内で WebLogic 固有の @weblogic.jws.security.RunAs アノテーションを使用します。これはつまり、Web サービスを最初に呼び出すユーザが誰であろうと、またそのユーザがどのロールにマップされていようと、サービスは指定されたロールとして内部で実行されるということです。

@RunAs アノテーションは、クラス レベルのみで指定できます。このアノテーションには次の属性があります。

次の例では、@RunAs アノテーションの JWS ファイルでの使い方を示します。該当する個所は太字で表示しています。

package examples.webservices.security_roles;
import javax.jws.WebMethod;
import javax.jws.WebService;
// WebLogic JWS アノテーション
import weblogic.jws.WLHttpTransport;
import weblogic.jws.security.RunAs;
@WebService(name="SecurityRunAsPortType",
serviceName="SecurityRunAsService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="security_runas",
serviceUri="SecurityRunAsService",
portName="SecurityRunAsPort")
@RunAs (role="manager", mapToPrincipal="juliet")
/**
* この JWS ファイルは、1 つのオペレーション sayHello を含む簡単な
* WebLogic Web サービスの基本となる
*
*/
public class SecurityRunAsImpl {
  @WebMethod()
public String sayHello(String message) {
System.out.println("sayHello:" + message);
return "Here is the message: '" + message + "'";
}
}

 


JAX-RPC サービス オブジェクト作成時のユーザ名とパスワードの設定

Web サービスの保護に @RolesAllowed JWS アノテーションを使用する場合、指定されたロールだけが Web サービス オペレーションの呼び出しを許可されます。つまり、保護されている Web サービスを呼び出すクライアント アプリケーションで JAX-RPC Service オブジェクトを作成する際には、ロールにマップするユーザのユーザ名およびパスワードを指定する必要があります。

WebLogic Server では、ユーザ名およびパスワードを設定して Service コンストラクタに渡すための HttpTransportInfo クラスが用意されています。以下の例は、スタンドアロン Java クライアントから Web サービスを呼び出す標準的な方法 (「Web サービスの呼び出し」を参照) に基づいていますが、同時に、HttpTransportInfo クラスを使用してユーザ名およびパスワードを設定する方法も示しています。太字の箇所については、サンプルの後で説明します。

package examples.webservices.sec_wsdl.client;
import weblogic.wsee.connection.transport.http.HttpTransportInfo;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.Stub;
/**
* SecWsdlService Web サービスの sayHello オペレーションを呼び出す
* 簡単なスタンドアロンのクライアント アプリケーション
*
* @author Copyright (c) 2004 by BEA Systems. All Rights Reserved.
*/
public class Main {
  public static void main(String[] args)
throws ServiceException, RemoteException{
    HttpTransportInfo info = new HttpTransportInfo();
info.setUsername("juliet".getBytes());
info.setPassword("secret".getBytes());
    SecWsdlService service = new SecWsdlService_Impl(args[0] + "?WSDL", info);
SecWsdlPortType port = service.getSecWsdlPort();
    try {
String result = null;
result = port.sayHello("Hi there!");
System.out.println( "Got result: " + result );
} catch (RemoteException e) {
throw e;
}
}
}

上記の例で注目すべき主な点は以下のとおりです。

保護されていない Web サービスの呼び出しの概要については、「Web サービスの呼び出し」を参照してください。


ページの先頭       前  次