Ibm mobilefirst 如何将worklight应用程序连接到启动时备份的datapower

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服务器上运行 如果正确,我们对执

我们正在开发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服务器


任何人都可以澄清我们对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);