我開發一個用Java編寫的WebApplication(JSF 1.2),我需要實現在新的瀏覽器窗口,打開其他第三方的WebApplication(在其他域)的新功能。 我需要使用表單POST請求登錄到此第三方WebApplication。 我的應用程序中的用戶應該只能看到一個按鈕,它應該將他登錄到此第三方Web應用程序。 問題是,我的Web應用程序中的用戶無法知道他登錄到此第三方系統的憑據。POST登錄請求一些第三方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的頁面時呈現,所以安全被打破:)
我的問題是: 是否有可能以任何方式,以確保此功能?
我知道,如果有人有像螢火蟲或Wireshark的工具,那麼他可以很容易地看到這個POST請求,如果他想,所以我覺得這不能保證一般。 我想以某種方式保證這一點,即它需要更多努力才能打破,而不僅僅是查看頁面源。
我認爲我應該這樣做: 在onclick上執行一些ajax請求,它會返回在服務器端生成的這個JavaScript,然後評估這個JavaScript,但我不知道如何做到這一點。
所以,球員,請給我一些建議 感謝
我同意,你必須做到這一點的服務器上。使用JavaScript只是在應用程序中打開了一個巨大的安全漏洞。您可以使用諸如Apache HTTPClient之類的功能將您的帖子發送到第三方服務器,然後在一個新窗口中呈現整個HTML響應。如果第三方應用程序寫入cookie或保留會話範圍,則可能會在將數據傳輸到客戶端時遇到一些問題,但無論您需要在服務器上執行登錄工作。 –