0

DataPower(DP) + Worklight(WL) POC を開発中です。

この目的を念頭に置いて、次の記事に従っています: http://www.ibm.com/developerworks/websphere/techjournal/1301_efremenko/1301_efremenko.html

このアプローチにおける DP の役割については明確であり、同期していますが、WL コードの実装に関連する質問が 1 つあります。

WL アプリケーション クライアント コードでは、次のように、バックエンドへのすべての http 要求 (REST+JSON) に WL HTTP アダプタを使用しています。

WL.Client.invokeProcedure(invocationData、オプション);

これらのアダプターは DP MPGW エンドポイントを指していますが、私たちの理解に基づいて、HTTP アダプター コードは WL サーバー上で実行されます。

それが正しい場合、実行シーケンスの仮定は次のとおりです。

WL クライアント アプリ -> WL サーバー -> DP MPGW -> WL サーバー

DW の記事に記載されているのと同じシーケンスを見ている場合:

WL クライアント アプリ -> DP MPGW -> WL サーバー

この場合、WL HTTP アダプターがどのように機能するかについて、私たちの理解を明確にしてもらえますか?

4

2 に答える 2

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;

};

ステップ2。プロシージャ メソッドの呼び出し (クライアント アプリの 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
});

}

Step3. アダプターで 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 Mobile Client -> Data Power -> Worklight Server

その理由は、datapower がすべてのエンタープライズ サービスにゲートウェイを提供する ESB レイヤーとして機能するためです。典型的な環境では、Worklight サーバーはイントラネット内にあり、datapower は DMZ ゾーンにあります。ここで、Datapower はワークライト サービスへのゲートウェイを提供する必要があります [この場合、アダプターと呼ばれるもの]。したがって、携帯電話のクライアント・コードは、ワークライト・サーバーを認識しません。これは、要求を精査し、有効な場合はそれをバックエンド Worklight サーバーに渡す datapower プロキシー サービスを呼び出します。応答が戻ってくると、それも調べられ、クライアント アプリケーションに転送されます。

このサービスをデータパワーで正確にホストすることは比較的簡単ですが、機能させるには多くの労力が必要です. LTPA トークンは、クライアントの検証において重要な役割を果たします。

これがあなたの質問に答えることを願っています。- アジターブ

于 2013-08-14T04:01:36.510 に答える