Liberty リポジトリー[8.5.5.6 以降]

Liberty プロファイルのカスタム JASPIC 認証プロバイダーの開発

JSR 196: Java™ Authentication Service Provider Interface for Containers 仕様に記述されている必要なインターフェースを実装するクラスを作成することによって、 カスタム Java Authentication SPI for Containers (JASPIC) 認証プロバイダーを開発することができます。

始める前に

JSR 196: Java Authentication Service Provider Interface for Containers 仕様に記述されている、JASPIC 認証プロバイダーおよびモジュールに関する具体的なインターフェース実装要件を検討してください。

このタスクについて

WebSphere Application Server Liberty プロファイルは、 Java Authentication SPI for Containers (JASPIC) バージョン 1.1 に指定されたサーブレット・コンテナー・プロファイルに対応するサード・パーティー認証プロバイダーの使用をサポートします。

サーブレット・コンテナー・プロファイルにはインターフェースが定義されており、 セキュリティー・ランタイム環境はそれらのインターフェースを WebSphere® Application Server 内の Web コンテナーと連携して使用して、 アプリケーションが Web 要求を処理する前後に認証モジュールを呼び出します。JASPIC モジュールを使用する認証は、 セキュリティー構成で JASPIC が有効にされている場合のみ実行されます。

カスタム認証プロバイダーを開発するには、 JSR 196: Java Authentication Service Provider Interface for Containers 仕様に記述されている必要なインターフェースを実装するクラスを作成します。1 つのプロバイダーが認証のために 1 つ以上の認証モジュールを使用できます。モジュールは、 認証を実行するためにコールバックを使用するか、または、必要なユーザー ID 情報をクライアント・サブジェクトに手動で追加できます。

手順

  1. javax.security.auth.message.config.AuthConfigProvider インターフェースを実装するクラスを作成します。
    AuthConfigProvider 実装クラスは、次のように、 2 つの引数を持つ public コンストラクターと、getServerAuthConfig public メソッドを定義する必要があります。
    import java.util.Map;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.config.AuthConfigFactory;
    import javax.security.auth.message.config.AuthConfigProvider;
    import javax.security.auth.message.config.ServerAuthConfig;
    
    public class SampleAuthConfigProvider implements AuthConfigProvider {
    
            public SampleAuthConfigProvider(Map<String, String> properties, AuthConfigFactory factory) {
                    ...
            }
            public ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler)
                    throws AuthException {
                    ...
            }
    }

    アプリケーションの Web モジュールによって処理される要求が到着すると、AuthConfigProvider 実装クラスのインスタンスが WebSphere Application Server によって使用されます。ServerAuthConfig インスタンスを取得するために getServerAuthConfig メソッドが使用されます。メソッド呼び出しの CallbackHandler 引数は authentication モジュールによって使用されます。

  2. javax.security.auth.message.config.ServerAuthConfig インターフェースを実装するクラスを作成します。
    ServerAuthConfig 実装クラスは、public メソッド getAuthContextID および getAuthContext を定義する必要があります。
    import java.util.Map;
    import javax.security.auth.Subject;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.MessageInfo;
    import javax.security.auth.message.config.ServerAuthConfig;
    import javax.security.auth.message.config.ServerAuthContext;
    
    public class SampleServerAuthConfig implements ServerAuthConfig {
    
            public String getAuthContextID(MessageInfo messageInfo) throws IllegalArgumentException {
                    ...
            }
            public ServerAuthContext getAuthContext(String authContextID, Subject serviceSubject, Map properties) 
                    throws AuthException {
                    ...
            }
    }

    ServerAuthConfig 実装クラスの getAuthContextID メソッドおよび getAuthContext メソッドは、ServerAuthContext インスタンスを取得するために使用されます。

  3. javax.security.auth.message.config.ServerAuthContext インターフェースを実装するクラスを作成します。
    ServerAuthContext 実装クラスは、 public メソッド validateRequest および secureResponse を定義する必要があります。
    import javax.security.auth.Subject;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.AuthStatus;
    import javax.security.auth.message.MessageInfo;
    import javax.security.auth.message.config.ServerAuthContext;
    
    public class SampleServerAuthContext implements ServerAuthContext {
    
            public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject) 
                    throws AuthException {
                    ...
            }
            public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) 
                    throws AuthException {
                    ...
            }
    }

    ServerAuthContext 実装クラスの validateRequest メソッドは、受信した Web 要求メッセージを認証するモジュールを呼び出すために使用されます。 認証の結果が成功の場合、Web コンテナーは受信した Web 要求メッセージをディスパッチし、 それをターゲット Web モジュールがアプリケーション内で処理します。認証の結果が成功でない場合、 要求は適切な応答状況でリジェクトされます。

  4. javax.security.auth.message.module.ServerAuthModule インターフェースを実装するクラスを作成します。
    ServerAuthModule 実装クラスは、public メソッド initializevalidateRequest、 および secureResponse を定義する必要があります。
    import javax.security.auth.Subject;
    import javax.security.auth.callback.CallbackHandler;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.AuthStatus;
    import javax.security.auth.message.MessageInfo;
    import javax.security.auth.message.MessagePolicy;
    import javax.security.auth.message.module.ServerAuthModule;
    
    public class SampleAuthModule implements ServerAuthModule {
    
            public void initialize(MessagePolicy requestPolicy, MessagePolicy responsePolicy, CallbackHandler handler, Map options) 
                    throws AuthException {
                    ...
            }
    
            public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject)
                    throws AuthException {
                    ...
            }
    
            public AuthStatus secureResponse(MessageInfo messageInfo, Subject serviceSubject) 
                    throws AuthException {
                    ...
            }
    
            public void cleanSubject(MessageInfo messageInfo, Subject subject) 
                    throws AuthException {
                    ...
            }
    }

    ServerAuthModule 実装クラスの initialize メソッドは、 authentication モジュールを初期化してそれを ServerAuthContext インスタンスと関連付けるために、ServerAuthContext 実装クラスによって呼び出されます。

    このクラスの validateRequest メソッドおよび secureResponse メソッドは、 受信した javax.security.auth.message.MessageInfo に含まれている javax.servlet.http.HttpServletRequest および javax.servlet.http.HttpServletResponse を認証するために使用されます。これらのメソッドは、initialize メソッドで受信した CallbackHandler インスタンスを使用して、 ユーザー・パスワードを検証するために WebSphere セキュリティー・ランタイムと対話し、 ユーザーの固有 ID およびメンバーシップ・グループを取得するためにアクティブ・ユーザー・レジストリーと対話することができます。取得したデータは クライアント・サブジェクト内の秘密資格情報のセット内の Hashtable に入れられます。CallbackHandler の WebSphere Application Server 実装は、 以下の 3 つのコールバックをサポートします。
    • CallerPrincipalCallback
    • GroupPrincipalCallback
    • PasswordValidationCallback

    WebSphere Application Server は、 PasswordValidationCallback.getUsername()CallerPrincipalCallback.getName() で取得される名前値が同一であると想定します。そうでない場合、予測不能な結果が発生します。CallbackHandlerhandle() メソッドは、 メソッドの引数配列で指定された各コールバックを順に処理します。したがって、 クライアント・サブジェクトの秘密資格情報に設定される名前値は、最後に処理されたコールバックから取得されたものです。

    CallbackHandler が認証モジュールによって使用されず、validateRequest が成功状況を戻す場合、 WebSphere Application Server は、カスタム・ログインを実行してユーザーの資格情報を取得できるように、 Hashtable インスタンスがユーザー ID 情報と共に clientSubject に含まれていることを必要とします。次の例のようにして、 この Hashtable をクライアント・サブジェクトに追加できます。
    import java.util.Hashtable;
    import java.util.String;
    import javax.security.auth.Subject;
    import javax.security.auth.message.AuthException;
    import javax.security.auth.message.AuthStatus;
    import javax.security.auth.message.MessageInfo;
    import com.ibm.wsspi.security.registry.RegistryHelper;
    import com.ibm.wsspi.security.token.AttributeNameConstants.AttributeNameConstants;
    
    public AuthStatus validateRequest(MessageInfo messageInfo, Subject clientSubject, Subject serviceSubject)
           throws AuthException {
           ...
           UserRegistry reg = RegistryHelper.getUserRegistry(null);
           String uniqueid = reg.getUniqueUserID(username);
    
           Hashtable hashtable = new Hashtable();
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_UNIQUEID, uniqueid);
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_SECURITYNAME, username);
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_PASSWORD, password);
           hashtable.put(AttributeNameConstants.WSCREDENTIAL_GROUPS, groupList); //optional
           clientSubject.getPrivateCredentials().add(hashtable);
           ...
    }

    Hashtable 要件およびカスタム・ログインについて詳しくは、 『システム・ログイン構成用の JAAS カスタム・ログイン・モジュールの開発』を参照してください。


トピックのタイプを示すアイコン タスク・トピック

インフォメーション・センターに関するご使用条件 | フィードバック


タイム・スタンプ・アイコン 最終更新: 2015 年 6 月 17日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=twlp_develop_jaspic
ファイル名: twlp_develop_jaspic.html