我们正在开发DataPower(DP)+ Worklight(WL)POC
考虑到这一目标,我们正在关注这篇文章:http://www.ibm.com/developerworks/websphere/techjournal/1301_efremenko/1301_efremenko.html
我们清楚并与此方法上的DP角色同步,但我们有一个与WL代码实现相关的问题。
在WL应用程序客户端代码中,我们使用WL HTTP适配器来处理后端的所有http请求(REST + JSON),如下所示:
WL.Client.invokeProcedure(invocationData,options);
这些适配器指向DP MPGW端点,但根据我们的理解,HTTP适配器代码在WL服务器上运行。
如果正确,我们对执行顺序的假设是:
WL客户端应用 - > WL服务器 - > DP MPGW - > WL服务器
当我们看到DW文章中提到的相同序列时:
WL客户端应用程序 - > DP MPGW - > WL服务器
有人可以澄清我们对WL HTTP适配器在这种情况下如何工作的理解吗?
答案 0 :(得分:1)
当您使用Worklight Adapter调用DP MPGW时,顺序如下
请求:
WL客户端应用程序 - > WL服务器(适配器) - > DP MPGW
回复:
DP MPGW - > WL服务器(适配器) - > WL客户端应用程序
注意:WL服务器(适配器)之前/之后的会话ID不相同。如果要进行SSO,则需要将适配器中的LTPA令牌传递给后端DP。以下是您的示例代码。
步骤1。获取LTPA令牌方法(在您的ChallengeHandler.js文件中)
sampleAppRealmChallengeHandler.isCustomResponse = function(response) {
if (!response || response.responseText === null) {
return false;
}
var indicatorIdx = response.responseText.search('j_security_check');
if (indicatorIdx >= 0){
return true;
}else if(response && (response.responseJSON) && (response.responseJSON['WL-Authentication-Success']) && (response.responseJSON['WL-Authentication-Success']['WASLTPARealm'])){
// set ltpaToken when login success
var realm = response.responseJSON['WL-Authentication-Success']['WASLTPARealm'];
ltpaToken = realm.attributes.LtpaToken;
console.log('Get ltpa token success: '+ltpaToken);
}
return false;
};
第二步。调用程序方法(在客户端App js文件中)
// define global LTPA token variable
var ltpaToken = null;
function getAccountInfo(){
// check ltpa token is not null, or get the ltap token from login user in WASLTPARealm
if(!ltpaToken){
if(WL.Client.isUserAuthenticated('WASLTPARealm')){
var attrs = WL.Client.getUserInfo('WASLTPARealm', 'attributes');
if(attrs){
ltpaToken = attrs.LtpaToken;
console.log('Set ltpaToken again: '+ltpaToken);
}
}
}
// Pass LTPA token from client App to WL server(adapter)
var token = {'LtpaToken2' : ltpaToken};
var invocationData = {
adapter: "DummyAdapter",
procedure: "getAccountInfo",
parameters: [token]
};
WL.Client.invokeProcedure(invocationData, {
onSuccess: getSecretData_Callback,
onFailure: getSecretData_Callback
});
}
步骤3。将LTPA令牌传递给适配器中的后端DP
function getServices( token) {
path = getPath("path/to/services");
var input = {
method : 'post',
returnedContentType : 'json',
path : path,
cookies: token
};
return WL.Server.invokeHttp(input);
}
答案 1 :(得分:0)
Developer Works [DW]文章正确地说出了呼叫顺序。它应该是[假设您的移动应用程序在客户手机上并且他/她在互联网上运行]
Worklight移动客户端 - >数据电源 - > Worklight Server
原因是,datapower充当ESB层,为所有企业服务提供网关。在典型环境中,Worklight服务器将位于Intranet内,数据容器将位于DMZ区域。现在Datapower需要为worklight服务提供一个网关[在你的情况下你称之为适配器]。因此,手机上的客户端代码甚至不知道任何工作灯服务器。它调用datapower代理服务,后者又检查请求,如果有效则将其传递给后端worklight服务器。当响应返回时,它也会被检查并转发到客户端应用程序。
在datapower上正确托管这项服务相对容易,但要使其正常工作需要付出很多努力。 LTPA令牌在验证客户端方面起着关键作用。
希望这能回答你的问题。 - Ajitabh