0

IBMWorklight サーバー上でセッション管理を開発しようとしています。以下は、セッション管理システムからのニーズです-

  1. すべてのユーザーが資格情報 (ユーザー名/パスワード) を使用してログインしたら、セッションを作成する必要があります。
  2. このセッションは、その特定のユーザーのセッション データを保存できる必要があります。つまり、セッションは資格情報を保存して、他のサービスにアクセスするために資格情報を再度渡す必要がないようにする必要があります。
  3. セッション タイムアウトは、一定時間後に発生するはずです。

私たちの進歩

  1. authenticationConfig にレルムを作成しました:

    <realm name="SimpleAuthRealm" loginModule="SimpleAuthLoginModule">
        <className>com.worklight.integration.auth.AdapterAuthenticator</className>
        <parameter name="login-function" value="SimpleAuthAdapter.onAuthRequired" />
        <parameter name="logout-function" value="SimpleAuthAdapter.onLogout" />
    </realm>
    
  2. authenticationConfig に作成された Login モジュール:

    <loginModule name="SimpleAuthLoginModule">
                <className>com.worklight.core.auth.ext.NonValidatingLoginModule</className>
            </loginModule>
    
  3. 作成されたセキュリティ テスト:

    <customSecurityTest name="SimpleAuthAdapterTest">
                   <test realm="SimpleAuthRealm" isInternalUserID="true"/>
               </customSecurityTest>
    
  4. 2 つのプロシージャを含むアダプタを作成しました。以下はadapter.xmlファイルです

     <procedure name="requestForData" securityTest="SimpleAuthAdapterTest" />
    <procedure name="requestForOtherData" securityTest="SimpleAuthAdapterTest" />
    
  5. 以下はアダプター実装ファイルです。

     function onAuthRequired(headers, errorMessage) {
        WL.Logger.info("onAuthRequired(headers, errorMessage)----> START");
        WL.Logger.info("headers: " + JSON.stringify(headers));
        WL.Logger.info("errorMessage: " + errorMessage);
    
        errorMessage = errorMessage ? errorMessage : null;
    
        WL.Logger.info("onAuthRequired(headers, errorMessage)----> STOP");
        return {
            authRequired : true,
            errorMessage : errorMessage
        };
    }
    
    function submitAuthentication(username, password) {
    
        WL.Logger.info("submitAuthentication(username, password)----> START");
        WL.Logger.info("username: " + username);
        WL.Logger.info("password: " + password);
    
        if (username === "worklight" && password === "worklight") {
    
            WL.Logger.info("Login successfull");
    
            var userIdentity = {
                userId : username,
                displayName : username,
    
            };
    
            WL.Server.setActiveUser("SimpleAuthRealm", userIdentity);
    
            var response = {
                authRequired : false,
                errorMessage : ""
            };
    
            WL.Logger.info("submitAuthentication(username, password)----> STOP");
            WL.Logger.info("response: " + JSON.stringify(response));
    
            return response;
        }
    
        var response = {
            authRequired : true,
            errorMessage : "Invalid login credentials"
        };
    
        WL.Logger.info("submitAuthentication(username, password)----> STOP");
        WL.Logger.info("response: " + JSON.stringify(response));
        return response;
    }
    function onLogout() {
    
        WL.Logger.info("onLogout()---->START");
        WL.Server.setActiveUser("SimpleAuthRealm", null);
    
        //WL.Client.logout('SimpleAuthRealm');
        WL.Logger.info("onLogout()---->STOP");
    }
    
  6. ログインページとホームページを含むダミーUIを作成しました。ログイン ボタンをクリックすると、submitAuthentication() サービスが呼び出され、ホームページに移行します。ホームページは、requestForData() サービスを呼び出すボタンと requestForOtherData() サービスを呼び出すボタンの 2 つのボタンで構成されています。

私たちが直面している問題:

  1. このフローは、保護されたサービス (requestForData など) を最初に呼び出すことを要求し、それに応答して Worklight サーバーがチャレンジをスローします。このチャレンジは、ユーザーの資格情報を提供することによってクリアされます。逆に、ユーザーの資格情報を提供してセッションを開始し、そのレルム (セキュリティ テスト) によって保護されているすべてのサービスにアクセスできるようにする必要があります。
  2. 最初のサービスのチャレンジをクリアすると、ユーザー資格情報を提供せずに他のサービスを呼び出すことができますが、次のサービスを呼び出す間、呼び出し元のクライアントの ID を渡さないため、最初のサービス コール チャレンジで確立されたセッションはユーザー固有ではないすべて/任意のユーザー。非常に非常にユーザー固有のセッションが必要です。

バンキング・モバイル・アプリケーションに取り組んでいるため、ワークライト・ミドルウェア・サーバーでセッションを維持するのが良い考えかどうかについてコメントしてください。上記の解決策を提案してください...

4

1 に答える 1