将cookie附加到WorkLight Adapter响应头

时间:2013-07-17 13:20:23

标签: ibm-mobilefirst worklight-adapters worklight-security

我正在使用WorkLight 5.0.6开发移动应用程序,我想在适配器返回的响应中附加安全cookie。

我们没有使用WorkLight身份验证领域,因为我们不希望将会话“绑定”到群集生产环境中的特定WL服务器。我们通过调用登录适配器对会话进行身份验证,该适配器根据后端系统对用户详细信息进行身份验证。作为来自登录适配器调用的响应的一部分,我想创建一个包含经过身份验证的信息的安全cookie(仅限http),并将其附加到从登录适配器返回的响应中。 cookie也应该包含在后续适配器的头部中,该适配器是从应用程序调用服务器开始的。

此致

 Tom.

1 个答案:

答案 0 :(得分: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并保存(我建议使用JSONStore保存,也可以加密保存的cookie)
function authSuccess(response){
    console.log("Auth Success");
    var myCookie = response.invocationResult.responseHeaders.CookieName

    // Save cookie somehow
}
  • 在后续的适配器调用中,从客户端发送cookie以及每个请求
  

function adapterRequestForProtectedResource(){

     

var mySecureCookie = getMyCookieFromLocalStorage();

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

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

}

  • 在适配器上,在标题

    中设置cookie

    function 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);
    

    }