如何将worklight应用程序连接到开始时支持的数据权限

时间:2013-07-29 15:02:28

标签: ibm-mobilefirst worklight-adapters ibm-datapower

我们正在开发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适配器在这种情况下如何工作的理解吗?

2 个答案:

答案 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