1

ベースアプリ (BaseApp) から新しいアプリケーション (NewApp) を起動する機能が必要な要件があります。BaseApp と NewApp は同じ ID ストアを使用するため、ログイン資格情報は同じです。BaseApp と NewApp は異なる技術スタック上にあり、どちらも Web アプリケーションです。それらは異なるサーバーでホストされています。NewApp は、Web アクセス用の基本的な認証を提供します。

Java スクリプトを使用して、BaseApp のリンクから NewApp を起動するにはどうすればよいですか。Basic Auth資格情報を注入できるようにしたいです。

xmlHTTPRequest を使用してみましたが、URL を起動するのではなく、REST サービスを呼び出して取得したデータを処理することを目的としているようです。java スクリプト window.open(url) を使用しても認証ヘッダーを挿入できません!

他に探索できるものはありますか?

追加情報: BaseApp のセッション Cookie は、NewApp には適用されません。BaseApp で初めて基本認証を完了すると、使用する必要がある新しいセッション Cookie が生成されます。xhr を介して、NewApp の URL を (基本認証で) 呼び出すことができます。これにより、セッション Cookie を含む応答が返されます。私が理解できない問題は、ブラウザの新しいウィンドウ/タブで応答をレンダリングする方法です。

4

1 に答える 1

2

最も簡単な解決策は、次の URL で新しいウィンドウを呼び出すことです

http://<user>:<pass>@newapp

ただし、資格情報がプレーン テキストで表示されるため、これは適切なソリューションではありません。次の解決策のいずれかを試してください。

  1. セッション Cookie を使用する場合、多くの場合、のように URL に追加できますhttp://newapp?JSESSIONID=kjasbfkji877786sdf
    1. ベースアプリから同じCookieを使用できます(アプリケーションが異なるマシン上にある場合、これは不可能です)
    2. NewApp を呼び出す XMLHttpRequest を作成し、BasicAuth を介して認証します。応答ヘッダーには、他のサーバーからの必要なセッション Cookie が含まれている必要があります。次に、必要な Cookie を使用して NewApp を呼び出すことができます。
  2. セッション Cookie がない場合は、2 番目の解決策 (XHR) を試すこともできます。これは、セッションが作成されると、セッションもブラウザーに保存され、ブラウザーがセッション処理自体を管理できるためです。

したがって、ケース1.2の場合。2. 次のことを行う必要があります。

var XMLReq = new XMLHttpRequest();
XMLReq.open("GET", "url", asynchronous?, "user", "password");
XMLReq.send(null);

1.2の場合。後続の呼び出しに追加のハンドラーを提供する必要があります。

XMLReq.onload = function() {
    window.open('http://NewApp?JSESSIONID='+XMLReq.getResponseHeader('Cookie')); 
    // note that 'JSESSIONID' depends on your backend implementation, this example is made for java backend
}

ケース2.それは単純です

XMLReq.onload = function() {
    window.open('http://NewApp'); 
}

この場合の最適なソリューションは OAuth または OpenID ですが、それはユースケースとシステム環境によって異なり、現在 OAuth または OpenID がサポートされていない場合は、より複雑なバックエンド実装が必要になる可能性があります。

于 2013-02-19T09:28:21.193 に答える