2010-02-16 304 views
3

我在我的glassfish服务器上使用gwt,并试图使我的一些RPC调用通过cookie进行身份验证。这可能吗?有没有任何例子如何编码?GWT RPC Cookie身份验证

回答

2

仅取决于Cookie进行身份验证会使您的网站/服务容易受到跨站点请求伪造/ XSRF/CSRF攻击 - 请阅读有关Security for GWT Applications的更多信息。

最好的方法是仔细检查从cookie获取的值以及通过其他方式传输到服务器的值 - 作为请求(头部,自定义字段等)的一部分。

除此之外,还有很多关于这个主题的教程 - 只是搜索Java(servlet)认证 - 它不一定是GWT特定的。 Google Web Toolkit Group也有许多threadsaboutthesubject

0

我假设您使用GWT的RPC servlet来处理客户端发出的请求。

我想到的一个选择是在请求到达GWT的servlet之前编写和配置一个可以检查cookie的ServletFilter。

0

您可能会重新考虑使用cookie,因为它是一个潜在的安全漏洞。 为什么不把你的通信到HTTPS?

+0

HTTPS不会阻止XSRF攻击AFAIK,因此您“仅”受到中间人攻击的保护。而且它有一个额外的怪癖,使得大多数浏览器不会**缓存HTTPS请求的内容。此外,与GWT和所有的AJAX的东西,你要么保持网站HTTP或HTTPS - 混合起来可能会导致一些可怕的警告在某些浏览器 - 不是你想展示给你的用户:) – 2010-02-17 02:06:41

+0

真的......但我正在考虑把整个网站置于HTTPS之下而不是混合它。 – Drejc 2010-02-17 09:36:48

+0

对,然后用户每次使用该站点时都必须下载整个应用程序(JS文件),可能会抱怨它加载的速度有多慢等。当然,如果这是银行网站或类似的东西,安全性是优先的数字1和整个网站应该是https。尽管如此,我关于仅cookie认证的观点仍然存在。 – 2010-02-17 23:32:57

0

你能不能只使用标准的“会话”范围,即

request.getSession() 

我在GWT应用程序使用的模式是有一个单独的“老式”登录形式,建立了会议。然后GWT应用程序的主机页面在他们成功登录之后显示。

如果必需的值不在会话中,那么用户没有登录。您的服务应该返回一个异常,可能是,指示GWT应用程序重定向到登录页面,或显示错误。

+1

每个RPC负载不发送自定义会话标识可能会使RPC服务对XSRF/CSRF攻击开放 – 2011-12-07 01:14:49