0

我们正在开发 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 Server 上。

如果它是正确的,我们对执行顺序的假设是:

WL 客户端应用程序 -> WL 服务器 -> DP MPGW -> WL 服务器

当我们查看 DW 文章中提到的相同序列时:

WL 客户端应用程序 ->DP MPGW -> WL 服务器

谁能澄清我们对 WL HTTP 适配器在这种情况下如何工作的理解?

4

2 回答 2

1

当您使用 Worklight Adapter 调用 DP MPGW 时,顺序如下
Request :
WL Client App --> WL Server (Adapter) --> DP MPGW
Response :
DP MPGW --> WL Server (Adapter) --> 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;

};

第2步。调用过程方法(在客户端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
});

}

第三步。将 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);

}

于 2013-07-30T05:49:49.203 回答
0

Developer Works [DW] 文章正确地说明了调用顺序。应该是 [假设您的移动应用程序在客户的手机上并且他/她正在互联网上运行]

Worklight 移动客户端 -> 数据电源 -> Worklight 服务器

这样做的原因是,datapower 充当 ESB 层,为所有企业服务提供网关。在典型环境中,您的 Worklight 服务器将位于 Intranet 内部,而 datapower 将位于 DMZ 区域。现在 Datapower 需要提供一个通向工作灯服务的网关 [在您的情况下,您称之为适配器]。因此,手机上的客户端代码甚至不知道任何工作灯服务器。它调用 datapower 代理服务,该服务反过来审查请求,如果有效,则将其传递给后端 worklight 服务器。当响应返回时,它也会被检查并转发给客户端应用程序。

将这项服务准确地托管在 datapower 上相对容易,但要使其正常工作需要付出很多努力。LTPA 令牌在这里在验证客户端方面起着关键作用。

希望这能回答你的问题。- 阿吉塔布

于 2013-08-14T04:01:36.510 回答