Java (JSF 1.2) で記述された WebApplication を開発しており、新しいブラウザ ウィンドウで (他のドメインの) 他のサード パーティの WebApplication を開く新しい機能を実装する必要があります。フォーム POST リクエストを使用して、このサード パーティの WebApplication にログインする必要があります。私のアプリケーションのユーザーには、このサードパーティの Web アプリケーションにログインするボタンのみが表示されます。問題は、Web アプリケーションのユーザーが、このサード パーティ システムにログインしている資格情報を認識できないことです。
これは、この問題に対する私の最初のダミーの解決策です。
JavaScript とボタンを追加しました。
<script type='text/javascript'>
function login(username, password) {
var action = "https://some.portal.at.other.domain/login.jsp";
var data = "";
data = data + "<form name='loginform' action='" + action + "' method='post'>";
data = data + " <input id='username' name='username' type='hidden' value='" + username + "' />";
data = data + " <input id='password' name='password' type='hidden' value='" + password + "' />";
data = data + "</form>";
data = data + "<sc" + "ript type='text/javascript'>";
data = data + " document.loginform.submit();";
data = data + "</sc" + "ript>";
newWindow=window.open("", "_blank");
newWindow.document.write(data);
newWindow.document.close();
}
</script>
...
<a4j:commandButton id="Login"
value="Login"
onclick="login('#{user.login}', '#{user.password}')"/>
これは魅力のように機能しますが、... ブラウザーで html ソースを表示すると、次のように表示されます。
<input id="form:Login" name="form:Login" onclick="login('john', 'secret')" value="Login" type="button" />
ページがレンダリングされるときにJSFが #{user.login} と #{user.password} を評価するため、セキュリティが壊れています:)
私の質問は次のとおりです。この機能を何らかの方法で保護することは可能ですか?
誰かが FireBug や WireShark のようなツールを持っていれば、この POST リクエストを必要に応じて簡単に見ることができることを私は知っているので、これは一般的に保護できないと感じています。単純にページのソースを表示するだけでなく、破るのに多くの労力が必要になるように、これを保護したいと考えています。
私は次のようなことをすべきだと思います:サーバー側で生成されたこのJavaScriptを返し、このJavaScriptを評価するonclickでいくつかのajaxリクエストを実行しますが、これを行う方法が正確にはわかりません。
だからみんな私にアドバイスを送ってくださいありがとう