Ibm mobilefirst 如何将worklight应用程序连接到启动时备份的datapower
我们正在开发DataPower(DP)+Worklight(WL)POC 考虑到这一目标,我们将遵循这篇文章: 关于DP在这种方法中的作用,我们很清楚,并且与之同步,但是我们有一个问题与WL代码的实现有关 在WL应用程序客户端代码中,我们使用WL HTTP适配器处理所有到后端的HTTP请求(REST+JSON),如下所示: WL.Client.invokeProcess(调用数据、选项) 这些适配器指向DP MPGW端点,但根据我们的理解,HTTP适配器代码在WL服务器上运行 如果正确,我们对执行顺序的假设是: WL客户端应用程序->WL服务器->DP MPGW->WL服务器 当我们查看DW文章中提到的相同序列时: WL客户端应用程序->DP MPGW->WL服务器Ibm mobilefirst 如何将worklight应用程序连接到启动时备份的datapower,ibm-mobilefirst,worklight-adapters,ibm-datapower,Ibm Mobilefirst,Worklight Adapters,Ibm Datapower,我们正在开发DataPower(DP)+Worklight(WL)POC 考虑到这一目标,我们将遵循这篇文章: 关于DP在这种方法中的作用,我们很清楚,并且与之同步,但是我们有一个问题与WL代码的实现有关 在WL应用程序客户端代码中,我们使用WL HTTP适配器处理所有到后端的HTTP请求(REST+JSON),如下所示: WL.Client.invokeProcess(调用数据、选项) 这些适配器指向DP MPGW端点,但根据我们的理解,HTTP适配器代码在WL服务器上运行 如果正确,我们对执
任何人都可以澄清我们对WL HTTP适配器在这种情况下如何工作的理解吗?当您使用Worklight Adapter调用DP MPGW时,顺序如下
请求:
WL客户端应用-->WL服务器(适配器)-->DP MPGW
响应:
DP MPGW-->WL服务器(适配器)-->WL客户端应用程序
注意:WL服务器(适配器)前后的会话id不同。如果要执行SSO,需要将适配器中的LTPA令牌传递给后端DP。这是您的示例代码。
第一步。获取LTPA令牌方法(在ChallengeHandler.js文件中) }) 第二步。调用过程方法(在客户端应用程序js文件中)
} 第三步。将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);
}developerWorks[DW]文章正确地说明了调用顺序。它应该是[假设您的移动应用程序在客户的手机上,并且他/她在互联网上运行] Worklight移动客户端->数据电源->Worklight服务器 原因是,datapower充当ESB层,为所有企业服务提供网关。在典型环境中,Worklight服务器将位于intranet内,datapower将位于DMZ区域。现在,Datapower需要提供worklight服务的网关[在您的情况下称为适配器]。因此,手机上的客户端代码甚至不知道任何worklight服务器。它调用datapower代理服务,后者反过来检查请求,如果请求有效,则将其传递到后端worklight server。当响应返回时,它也会被检查并转发给客户端应用程序 在datapower上准确地托管此服务相对容易,但要使其正常工作需要付出大量努力。LTPA令牌在验证客户端方面起着关键作用 希望这能回答你的问题。
-Ajitabh有没有办法直接从客户端连接到datapower后端?因为我们需要这样做:WL客户端应用程序-->DP MPGW-->WL服务器(适配器),我刚刚证明,您的代码和ltpaToken2 cookie已创建,但是,我收到以下错误消息:“错误404:javax.servlet.ServletException:java.io.FileNotFoundException:SRVE0190E:找不到文件:/apps/services/”,如果我用同一个用户重新登录,我会收到这样一条错误消息:“一个用户以匿名身份进行身份验证,试图访问匿名用户拥有的会话”
// 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
});
function getServices( token) {
path = getPath("path/to/services");
var input = {
method : 'post',
returnedContentType : 'json',
path : path,
cookies: token
};
return WL.Server.invokeHttp(input);