将 cookie 附加到 WorkLight Adapter 响应标头
Posted
技术标签:
【中文标题】将 cookie 附加到 WorkLight Adapter 响应标头【英文标题】:Attaching cookie to WorkLight Adapter response header 【发布时间】:2013-07-17 13:20:23 【问题描述】:我正在使用 WorkLight 5.0.6 开发一个移动应用程序,我想将一个安全 cookie 附加到适配器返回的响应中。
我们没有使用 WorkLight 身份验证领域,因为我们不希望将会话“绑定”到集群生产环境中的特定 WL 服务器。我们通过调用登录适配器来验证会话,该适配器根据后端系统验证用户详细信息。作为登录适配器调用响应的一部分,我想创建一个包含经过身份验证的信息的安全 cookie(仅限 http),并将其附加到登录适配器返回的响应中。 cookie 还应该包含在从应用程序调用到服务器的后续适配器的标头中。
问候,
Tom.
【问题讨论】:
【参考方案1】:我建议尝试创建一个与您的后端通信的自定义 Worklight 身份验证器。可以在此处找到自定义身份验证器的文档:
http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v600/08_04_Custom_Authenticator_and_Login_Module.pdf
为了回答您的问题,以下是我在不使用自定义身份验证器的情况下的处理方法:
进行适配器调用以从客户端进行身份验证从客户端的响应中获取cookie并保存(我建议使用JSONStore保存,它也可以加密保存的cookie)函数验证(用户名,密码)
var invocationData = adapter : 'authenticationAdapter', procedure : 'authenticate', parameters : [username, password] ; WL.Client.invokeProcedure(invocationData, onSuccess : authSuccess, onFailure : authFailure );
在随后的适配器调用中,将来自客户端的 cookie 与每个请求一起发送function authSuccess(response) console.log("Auth Success"); var myCookie = response.invocationResult.responseHeaders.CookieName // Save cookie somehow
函数适配器RequestForProtectedResource()
var mySecureCookie = getMyCookieFromLocalStorage();
var invocationData = adapter : 'protectedResourceAdapter', procedure : 'getResource', parameters : [mySecureCookie] ; WL.Client.invokeProcedure(invocationData, onSuccess : success, onFailure : failure );
在适配器上,在 header 中设置 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);
【讨论】:
以上是关于将 cookie 附加到 WorkLight Adapter 响应标头的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Apache 将 cookie 值附加到响应位置标头的末尾?
删除 Worklight Adapter 中的 Cookie:多个会话使用基于相同适配器的身份验证
如何在worklight的浏览器控制台中显示jsessionid
text 附加cookie的图像到squarespace cookie的横幅