IBM Worklight 6.0 - 如果客户端注销/进入,则具有基本身份验证的适配器不会更新auth标头

时间:2013-07-21 14:57:09

标签: ibm-mobilefirst worklight-adapters worklight-security

我有一个使用基于适配器的身份验证的Worklight v6.0应用程序。

适配器是一个HTTP适配器,它使用Basic Auth。

调用后端REST服务

适配器和后端服务之间没有会话或cookie。在我的适配器描述符中,我已将cookiePolicy设置为IGNORE_COOKIES。从适配器到后端的每个请求都使用该请求上的基本身份验证头进行身份验证。

每个适配器的过程都将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>

这一切都很棒。移动应用程序调用适配器上的安全过程,这会触发身份验证,身份验证成功完成,重新调用该过程,并且我可以在网络跟踪上看到正确的基本身份验证标头正在从适配器调用到后端。如果移动应用程序在已经过身份验证时进行适配器调用,则适配器只使用正确的Basic Auth标头调用后面的en。如果多个移动应用程序同时连接并以不同用户身份登录,则适配器会为调用它的用户使用正确的Basic Auth标头。

唯一不起作用的是移动应用程序调用适配器,作为user1进行身份验证,从后端获取user1的正确结果,调用WL.Client.logout(),再次调用适配器,这次以用户2进行身份验证。

在适配器过程中,我调用WL.Server.getActiveUser()来验证活动用户,果然用户是正确的(user2)。但是当呼叫发送到后端时,Worklight添加的基本身份验证头具有user1的凭据,因此移动应用程序会得到错误的结果。

如果我退出并重新加注应用程序,一切都很好,我可以直接作为用户2进行身份验证,并获得user2的正确结果。唯一的问题是当我在移动应用程序和Worklight Server之间的单个会话中以不同的用户身份注销/重新登录时。

这是使用Worklight适配器使用基本身份验证的已知限制吗?当我退出时,有什么方法可以强制移动客户端和Worklight Server之间的连接重置? (没有重新启动应用程序)

1 个答案:

答案 0 :(得分:2)

由于您说“物理”退出并重新打开应用程序会为您修复此问题,因此您可以在注销后立即使用WL.Client.reloadApp(),以便在登录 - 登录 - 登录时保持应用程序流量。看看它是否有帮助。