POST登录请求到某些第三方Web应用程序

时间:2012-09-12 16:03:45

标签: java ajax post login jsf-1.2

我正在开发用Java编写的WebApplication(JSF 1.2),我需要实现在新浏览器窗口中打开其他第三方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请求,所以我觉得这一般无法保证。 我希望以某种方式确保这一点,与简单地查看页面源相比,它需要更多努力才能打破。

我认为我应该做的事情如下: 在onclick上执行一些ajax请求,该请求将返回在服务器端生成的JavaScript,然后评估此JavaScript,但我不确切知道如何执行此操作。

所以请各位给我一些建议 感谢

1 个答案:

答案 0 :(得分:2)

保护此类过程的唯一方法是在服务器端执行它。即:如果登录发生在客户端,则必须假设客户端可以完全访问登录中使用的所有凭据。

处理此类情况的标准方法,其中需要客户端请求,但必须首先进行秘密登录,是在服务器端进行登录,在用户后面进行登录,然后返回令牌,客户可以使用它来授权他们绝对允许的特定请求。