我正在尝试使用和理解LTPA安全性在工作灯中的使用以及LTPA cookie的传播。
我能够再次验证WAS并使用嗅探器我可以看到worklight返回LtpaToken2 cookie但是当我调用HTTP适配器时,它调用与Worklight服务器在同一台机器中的其他WAS中的服务,该适配器不会传播cookie。
我想我已经设置了正确的配置。 (最后)
是否可以配置worklight服务器以自动将LTPA令牌从应用程序传播到适配器,从适配器传播到最终服务?
如果无法自动执行此操作,如何在适配器代码中检索Ltpa cookie,以将其添加到WL.Server.invokeHTTP()方法的headers参数中。
这是我的安全配置:
为了它的工作,我不得不在worklight studio中生成的自定义战争中手动添加login.html。
应用程序描述符:
<ipad bundleId="xxxx" securityTest="BPMApp-strong-mobile-securityTest" version="1.0">
适配器描述符:
<procedure connectAs="endUser" name="getRest" securityTest="BPMAdapter-securityTest"/>
安全配置:
<realm loginModule="WASLTPAModule" name="BPMAuthRealm">
<className>com.worklight.core.auth.ext.WebSphereFormBasedAuthenticator</className>
<parameter name="login-page" value="/login.html"/>
<parameter name="error-page" value="/login.html"/>
<parameter name="cookie-name" value="LtpaToken2"/>
</realm>
<loginModule name="WASLTPAModule" canBeResourceLogin="true" isIdentityAssociationKey="false">
<className>com.worklight.core.auth.ext.WebSphereLoginModule</className>
</loginModule>
<mobileSecurityTest name="BPMApp-strong-mobile-securityTest">
<testUser realm="BPMAuthRealm"/>
<testDeviceId provisioningType="none"/>
</mobileSecurityTest>
<customSecurityTest name="BPMAdapter-securityTest">
<test isInternalUserID="true" realm="BPMAuthRealm" isInternalDeviceID="true"/>
</customSecurityTest>
谢谢。
答案 0 :(得分:1)
我相信这就是你要找的东西:
function getCurrentUser() {
path = '/snoop';
var attributes = WL.Server.getActiveUser().attributes;
var token = "LtpaToken=" + attributes.get('LtpaToken');
var input = {
method : 'get',
returnedContentType : 'html',
headers: {"Cookie": token},
path : path
};
return WL.Server.invokeHttp(input);
}
此代码剪辑来自5.0.3,因此我认为在较新版本中从属性对象获取令牌的语法可能已更改。
您可能需要更改:
var token = "LtpaToken=" + attributes.get('LtpaToken');
为:
var token = "LtpaToken=" + attributes['LtpaToken'];
但这是个主意。适配器不会在后续请求时发送cookie,但是适配器可以通过用户的“属性”对象使用cookie。这只是获取cookie并在每次适配器调用时将其添加到头部的问题。