我有一个使用基于适配器的身份验证的WorklightV6.0应用程序。
适配器是一个HTTP适配器,它使用Basic Auth调用后端REST服务。
适配器和后端服务之间没有会话或cookies。在我的适配器描述符中,我将cookiePolicy设置为IGNORE_COOKIES。从适配器到后端的每个请求都使用该请求上的基本auth头进行身份验证。
适配器的每个过程都将connectAs设置为: endUser。
<?xml version="1.0" encoding="UTF-8"?>
<wl:adapter name="MyAdapter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wl="http://www.worklight.com/integration" xmlns:http="http://www.worklight.com/integration/http">
<displayName>MyAdapter</displayName>
<description>MyAdapter</description>
<connectivity>
<connectionPolicy xsi:type="http:HTTPConnectionPolicyType" cookiePolicy="IGNORE_COOKIES">
<protocol>http</protocol>
<domain>localhost</domain>
<port>9080</port>
<!-- Following properties used by adapter's key manager for choosing
<authentication>
<basic />
</authentication>
</connectionPolicy>
<loadConstraints maxConcurrentConnectionsPerNode="2" />
</connectivity>
<procedure name="submitAuthentication"></procedure>
<procedure connectAs="endUser" name="getCurrentUser"
securityTest="MyAdapter-securityTest" />
</wl:adapter>
这一切都很好用。移动应用程序调用适配器上的安全过程,这将触发身份验证,身份验证成功完成,该过程被重新调用,我可以在网络跟踪中看到,从适配器到后端的调用中放置了正确的基本auth标头。如果移动应用程序在已经通过身份验证的情况下进行适配器调用,则适配器只会使用正确的基本Auth标头调用back en。如果同时连接多个移动应用程序并以不同用户身份登录,则适配器将为调用它的用户使用正确的基本Auth标头。
唯一不起作用的是,当移动应用程序调用适配器,以user1身份进行身份验证,从后端获得user1的正确结果,调用WL.Client.logout(),对适配器进行另一次调用,并这次以User2身份进行身份验证。
在适配器过程中,我调用WL.Server.getActiveUser()来验证活动用户,果然,用户是正确的(user2)。但是,当调用转到后端时,Worklight添加的基本Auth头具有user1的凭据,因此移动应用程序获得错误的结果。
如果我退出并重新启动应用程序,一切正常,我可以直接作为用户2进行身份验证,并获得user2的正确结果。唯一有问题的情况是,当我在移动应用程序和Worklight服务器之间的单个会话中以不同的用户身份注销/重新登录时。
这是将基本身份验证与Worklight适配器一起使用的已知限制吗?有没有办法在我注销时强制重置移动客户端和Worklight服务器之间的连接?(无需重启应用程序)
发布于 2013-07-21 23:04:19
既然你说“物理”退出并重新打开应用程序可以为你解决这个问题,那么你可以在注销后立即使用WL.Client.reloadApp()
,以便在登录-注销-登录的情况下保持应用程序流。看看有没有帮助。
https://stackoverflow.com/questions/17773649
复制相似问题