Application Server
数据库服务器
我们有一个MobileFirst应用程序,它是我们现有应用程序的移动前端。现有应用程序是提供RESTful Web服务的WebSphere应用程序。 MobileFirst应用程序通过MobileFirst Adapter与现有WebSphere应用程序连接。 RESTful Web服务URL是受保护的URL,使用LDAP完成身份验证并创建LTPA令牌。 LDAP是通过WAS控制台在WebSphere中配置的。
我们的MobileFirst应用程序运行良好,可以连接并使用RESTful Web服务,但前提是MobileFirst应用程序在单独的WebSphere概要文件或单独的WebSphere服务器上运行。如果我们尝试将MobileFirst应用程序安装到与提供RESTful Web服务的现有WebSphere应用程序相同的WebSphere概要文件中,那么它就会中断。 Mobile设备成功通过MobileFirst进行身份验证,然后调用Adapter以调用RESTful Web服务调用。但是,来自移动设备的下一个适配器调用以HTTP 401错误结束,这是一个授权错误。
我推测在适配器对我们现有的WebSphere应用程序进行身份验证后,该应用程序提供的Web服务会以某种方式覆盖移动设备和MobileFirst之间的身份验证。
我的问题如下。
MobileFirst应用程序和提供RESTful Web服务的现有WebSphere应用程序都可以在同一个WebSphere配置文件中运行并共享LTPA令牌,这样当Mobile设备使用MobileFirst进行身份验证时,它也可以被授权执行Web服务在同一个WebSphere概要文件中运行。
建议在同一个WebSphere配置文件中运行这两个应用程序,还是应该运行单独的配置文件或在不同的服务器上运行。
成本是一个问题,因为我们不一定要为运行MobileFirst而添加物理上独立的服务器的额外运营成本。
从运营角度来看,添加和维护多个WAS配置文件是额外的工作。
理想情况下,我们真的希望在同一个WebSphere配置文件中运行这两个应用程序。
以下是trace.log,SystemOut.log,SystemErr.log和firebug-console.html
的Google云端硬盘链接(无需登录)MobileFirst应用程序使用“预览为公共资源”在浏览器中运行。使用实际的Android或iOS设备时,我得到相同的结果。 MobileFirst应用程序WAR在与通过适配器访问的Web服务WAR相同的WAS配置文件中运行。当MobileFirst应用程序WAR在单独的WAS配置文件或单独的WAS服务器上运行时,相同的代码可以成功运行。
请告知。
答案 0 :(得分:1)
我自己解决了这个问题。这是我的团队从另一个团队继承的代码库。
移动设备正在启动与在WebSphere上运行的MobileFirst的连接,该连接创建了一个JSESSIONID cookie和一个LTPA2Token cookie。然后调用一个适配器,该适配器调用对在同一WebSphere概要文件中运行的Web服务的HTTP调用。调用Web服务创建了新的JSESSIONID和LTPA2Token cookie。这些新的cookie被返回到移动设备,移动设备上的JavaScript代码正在获取这些新的cookie值,然后覆盖document.cookies,从而消除了原始cookie。然后,当移动设备在后续呼叫中尝试与MobileFirst连接时,它的会话无效并最终收到HTTP 401错误,这是一个授权错误。因此,我们将此问题归因于我们的应用程序的不良实现。