我有一个使用基于适配器的身份验证的 Worklight v6.0 应用程序。
该适配器是一个 HTTP 适配器,它使用基本身份验证调用后端 REST 服务。
适配器和后端服务之间没有 session 或 cookie。在我的适配器描述符中,我已将 cookiePolicy 设置为 IGNORE_COOKIES。从适配器到后端的每个请求都使用该请求上的基本身份验证 header 进行身份验证。
每个适配器的过程都将 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>
这一切都很好。移动应用程序调用适配器上的安全过程,这会触发身份验证,身份验证成功完成,该过程被重新调用,并且我可以在网络跟踪中看到正确的基本身份验证 header 正在从适配器调用后端。如果移动应用程序在已通过身份验证的情况下进行适配器调用,则适配器仅使用正确的基本身份验证 header 对后端进行调用。如果多个移动应用程序同时连接并以不同用户身份登录,则适配器会为调用它的用户使用正确的基本身份验证 header 。
唯一不起作用的是,当移动应用程序调用适配器、以 user1 身份进行身份验证、从 user1 后端获取正确结果、调用 WL.Client.logout()、再次调用适配器时,这次以用户 2 身份进行身份验证。
在适配器过程中,我调用 WL.Server.getActiveUser() 来验证事件用户,果然,用户是正确的(user2)。但是,当调用发送到后端时,Worklight 添加的基本身份验证 header 具有 user1 的凭据,因此移动应用程序会得到错误的结果。
如果我退出并重新启动应用程序,一切都会很好,我可以直接以用户 2 身份进行身份验证并获得用户 2 的正确结果。唯一出现问题的情况是当我在移动应用程序和 Worklight Server 之间的单个 session 中以不同用户身份注销/重新登录时。
这是通过 Worklight 适配器使用基本身份验证的已知限制吗?当我注销时,有什么方法可以强制重置移动客户端和 Worklight Server 之间的连接吗? (无需重新启动应用程序)
最佳答案
既然您说“物理”退出并重新打开应用程序可以为您解决此问题,那么您可以在注销后立即使用 WL.Client.reloadApp()
,以保持应用程序流程,以防万一登录-注销-登录。看看是否有帮助。
关于ibm-mobilefirst - IBM Worklight 6.0 - 如果客户端注销/登录,具有基本身份验证的适配器不会更新身份验证 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773649/