0

WorkLight 5.0.6 を使用してモバイル アプリを開発しており、アダプターから返される応答に安全な Cookie を添付したいと考えています。

クラスター化された実稼働環境で特定の WL サーバーにセッションを「バインド」したくないため、WorkLight 認証レルムを使用していません。バックエンド システムに対してユーザーの詳細を認証するサインオン アダプターを呼び出して、セッションを認証します。サインオン アダプター呼び出しからの応答の一部として、認証された情報を含む安全な Cookie (http のみ) を作成し、それをサインオン アダプターから返される応答に添付したいと考えています。Cookie は、サーバーへのアプリケーション呼び出しから作成された後続のアダプターのヘッダーにも含まれている必要があります。

よろしく、

 Tom.
4

1 に答える 1

5

バックエンドと通信するカスタム Worklight オーセンティケーターを作成することをお勧めします。カスタム認証システムのドキュメントは、次の場所にあります。

http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v600/08_04_Custom_Authenticator_and_Login_Module.pdf

あなたの質問に答えるために、カスタム認証システムを使用せずにアプローチする方法を次に示します。

  • クライアントから認証するためのアダプター呼び出しを行う

関数認証(ユーザー名、パスワード){

  var invocationData = {
          adapter : 'authenticationAdapter',
          procedure : 'authenticate',
          parameters : [username, password]
  };

  WL.Client.invokeProcedure(invocationData, {
      onSuccess : authSuccess,
      onFailure : authFailure
  });     

}

  • クライアント側の応答から Cookie を取得して保存します (保存された Cookie を暗号化できる JSONStore を使用して保存することをお勧めします)。
function authSuccess(response){
    console.log("Auth Success");
    var myCookie = response.invocationResult.responseHeaders.CookieName

    // Save cookie somehow
}
  • 後続のアダプター呼び出しで、各要求とともにクライアントから Cookie を送信します。

関数 adapterRequestForProtectedResource(){

var mySecureCookie = getMyCookieFromLocalStorage();

  var invocationData = {
          adapter : 'protectedResourceAdapter',
          procedure : 'getResource',
          parameters : [mySecureCookie]
  };

  WL.Client.invokeProcedure(invocationData, {
      onSuccess : success,
      onFailure : failure
  });     

}

  • アダプターで、ヘッダーに Cookie を設定します

    関数 getResource(secureCookie) {

    // Secure cookie must be of the form:  "CookieName=cookievalue"
    
    var input = {
        method : 'get',
        returnedContentType : 'json',
        path : "/resource",
        headers: {"Cookie": secureCookie}
    };
    
    return WL.Server.invokeHttp(input);
    

    }

于 2013-07-17T21:22:27.310 に答える