GWT RPC 安全、http 标头、身份验证和 requestbuilder

Posted

技术标签:

【中文标题】GWT RPC 安全、http 标头、身份验证和 requestbuilder【英文标题】:GWT RPC security, http header, authentication and requestbuilder 【发布时间】:2012-06-06 09:25:07 【问题描述】:

我假设 GWT RPC 实际上使用 RequestBuilder。

有没有办法提取我的 RPC 服务异步请求者使用的 RequestBuilder 实例?

其实,我的问题是,如何提取 RequestBuilder 实例以将身份验证令牌作为 http 标头插入?有没有办法在 RPC 服务请求中插入 http 头?

即使我可以在请求中插入一个 http 标头,那么如何告诉远程 servlet 期待该身份验证令牌?因此,事实上,GWT RPC 是否提供了一个安全认证框架?

我认为答案是否定的,或者至少不方便。我说的对吗?

我将 RestEasy 与 RestyGWT over SSL 结合使用,我们可以随时插入标题。顺便说一句,RestyGWT 构造它的请求以使用 RequestBuilder。

我的实际动机是比较 GWT RPC 和 GWT JAX-RS (RestyGWT + RestEasy) 之间的安全有效性。因此,如果您作为回答者,有一个替代的详细论述来比较 RPC 与直接使用 RequestBuilder 或 REST 的安全有效性(而不是直接回答这个问题),请随时详细说明。

我是否可以假设 GWT RPC 不安全/不有效,我应该避免将 GWT RPC 用于安全的经过身份验证的请求?

【问题讨论】:

【参考方案1】:

您可以让您的异步方法返回RequestRequestBuilder 而不是voidRequest 允许您 abort() 挂起的请求,而 RequestBuilder 允许您在请求发送之前修改请求(如果您将返回类型声明为 RequestBuilder,则您负责调用 send() 来实际提出请求)。

或者,您可以使用RpcRequestBuilder 为使用特定异步服务代理进行的每个调用自定义RequestBuilder

【讨论】:

【参考方案2】:

据我所知,gwt rpc 没有内置的安全解决方案。 但如果我需要这样的身份验证,我会采取以下步骤:

1) 为了能够设置 http 标头,您可以像我自己一样创建自定义请求生成器:

MyServiceAsync myService = GWT.create(MyService.class);
MyRequestBuilder myRequestBuilder = new MyRequestBuilder();
myRequestBuilder.addHeader("header", "value");
((ServiceDefTarget) serviceInstance).setRpcRequestBuilder(myRequestBuilder);

MyRequestBuilder 扩展了 RpcRequestBuilder。在 MyRequestBuilder 中,我覆盖了放置标题的方法 doFinish(RequestBuilder rb)。

也许这不是一个超级解决方案,但我还没有找到更好的解决方案。

2) 对于服务器端,我将实现 AuthenticationFilter 以检查标头并在调用 Servlet 之前执行服务器端身份验证功能。

【讨论】:

从这里的坟墓开始,但你正在转换变量serviceInstance。你真的应该铸造myService吗?这是错字还是我遗漏了什么?

以上是关于GWT RPC 安全、http 标头、身份验证和 requestbuilder的主要内容,如果未能解决你的问题,请参考以下文章

在 java 中使用 http 标头在 Spring Security 中传递基本身份验证详细信息

Spring security - 身份验证后的 GWT 重定向

Thrift RPC 标头

对于 GWT GAE Java 应用程序,这种 GWT/RPC 安全方法的安全性如何?

忽略所有 HTTP.OPTIONS 调用的身份验证是不是安全?

通过 cookie 标头发送令牌身份验证信息是不是安全?