Android应用程序未在MFP 7.1中返回会话Cookie



1)应用程序类型:手机银行
2) 现有Worklight版本:6.1(使用者版)
3) Cordova版本:3.1.0
4) 支持的平台:Android 4.2+,iOS 7+
5) 服务器操作系统:Window Server 2008
6) 应用程序服务器:IBM WebSphere Liberty Profile
7) 数据库:IBM DB2

应用程序是用自定义质询处理程序实现的,用于从IBM WebSeal验证用户,ChallengeHandler向IBM WebSeaal发出HTTPS请求以执行以下操作:

  1. 从IBM WebSeal获取登录参数(例如,登录页面类型、登录表单提交URL)
  2. 交换加密密钥(在HTTPS之上,银行要求使用jCryption进一步加密流量)
  3. 提交加密的用户名/密码

以上所有步骤都是用jQuery的ajax()、post()或getJson()函数实现的,它在上面的设置中运行得很好。

问题
Worklight 6.1升级到MobileFirst 7.1后,上述身份验证方法不再适用于Android设备,而iOS仍按预期工作。

在花了几天时间对详细的请求和响应日志进行故障排除后,我们得出结论,Android在jQuery的ajax()post()和MobileFirst HTTP请求之间有不同的Cookie管理上下文。

示例:
通过使用WLJQ.ajax(…myUrl…)生成一个Set Cookie响应,当请求位于匹配域中时,Cookie将自动附加到所有子序列ajax请求中。

但是ajax()请求的Set Cookies响应标头不会影响以下MobileFirst HTTP请求函数:1.ChallengeHandler.submitLoginForm
2.WL.Client.invokeProcedure
3.WL.客户端登录

我们的ChallengeHandler使用cookie值对用户进行身份验证并记住用户,但由于cookie不会在MobileFirst和jQuery之间共享,因此对WL.ClientInvokeProcedure的调用将被IBM WebSeal阻止,因为该请求被标识为未经身份验证的用户。

我们还观察到,jQuery-ajax/post的用户代理与上面的MobileFirst函数有很大不同:

MobileFirst用户代理:Dalvik/2.1.0(Linux;U;Android 6.0.1;SM-G925F内部版本/MMB29K)/Worklight/7.1.0.0 WLNativeAPI(zerolte;MMB29K.G925FXXU3DPCN;SM-G926F;SDK 23;Android 6.01)

jQuery(在三星Galaxy S6上运行)
用户代理:Mozilla/5.0(Linux;Android 6.0.1;SM-G925F内部版本/MMB29K;wv)AppleWebKit/537.36(KHTML,类似Gecko)版本/4.0 Chrome/49.02623.105 Mobile Safari/537.36/Worklight/7.1.0.0

疑难解答摘要
1) 更新Android的CookieManager以接受第三方cookie

CookieManagercookieManager=CookieManager.getInstance();cookieManager.setAcceptThirdPartyCookies(webView,true);

2) 手动从jQuery post()中检索cookie值,并使用WL.Client.setCookie 附加到MobileFirst函数

但由于浏览器限制,我们无法检索Set Cookie标头值

3) 将所有jQuery调用转换为使用challengeHandler.submitLoginForm,但使用这种方法,MobileFirst会话在每次调用上述代码后都会重置,因此它仍然不起作用。

在与IBM一起打开PMR之后,从WL 6.2开始,这确实是一次设计更改。根据以下IBM:

•在iOS操作系统中,Cookie存储由单例管理对象(共享实例)。因此,应用程序cookie在来自Webview和本机请求的AJAX请求。这是iOS应用程序从v6.1迁移到v6.1后的原因似乎还在继续在不更改代码的情况下工作

•在安卓操作系统中,情况并非如此。Cookie存储特定于每个http客户端,因此AJAX和本机请求不共享cookie。应用程序出现问题时需要更改应用程序代码自定义AJAX请求

我们更改了代码以使用IBM推荐的WLResourceRequest的API。

如果您将文本表述为一个问题会更好。目前还不清楚你是否真的有问题。

如果您这样做了,那么问题中提供的主题保证打开IBM PMR(支持票证),因为无法通过StackOverflow上的问题来处理它。

如果您确实打开了PMR,请提供完整的复制。

最新更新