如何在JavaEE6中保护RESTWeb服务
我已经使用JavaEE6(使用参考实现)创建了一个web应用程序,并希望将其作为RESTWeb服务公开如何在JavaEE6中保护RESTWeb服务,java,web-services,jakarta-ee,rest,Java,Web Services,Jakarta Ee,Rest,我已经使用JavaEE6(使用参考实现)创建了一个web应用程序,并希望将其作为RESTWeb服务公开 背景是,我希望能够将数据从web应用程序检索到我制作的iOS应用程序。问题是如何保护应用程序?我只希望我的应用程序使用web服务。这可能吗?我该怎么做?我只需要知道我应该搜索和阅读什么,而不是实际的代码 取决于您想让它变得多么安全 如果你真的不在乎,只需在你的应用程序中嵌入一个秘密单词,并包含在所有请求中 如果您更关心,请执行上述操作,并仅通过https公开服务 如果您希望它是安全的,请向您
背景是,我希望能够将数据从web应用程序检索到我制作的iOS应用程序。问题是如何保护应用程序?我只希望我的应用程序使用web服务。这可能吗?我该怎么做?我只需要知道我应该搜索和阅读什么,而不是实际的代码 取决于您想让它变得多么安全
- 如果你真的不在乎,只需在你的应用程序中嵌入一个秘密单词,并包含在所有请求中李>
- 如果您更关心,请执行上述操作,并仅通过https公开服务李>
- 如果您希望它是安全的,请向您的应用程序颁发客户端证书并要求 访问服务时要存在的有效客户端证书
由于http协议的性质,https请求中的路径部分是加密的。因此它是非常安全的。有多种方法可以通过中间人攻击解密请求,但它需要完全控制客户端设备,包括安装ilegal ssl证书。但是,我会花更多的时间在我的应用程序上,以使其成功。不幸的是,您的Web服务永远不会完全安全,但以下是一些您可以做的基本事情:
- 使用SSL
- 在
请求中包装所有(应用程序)出站有效负载。这将防止随意窥探您的Web服务的工作方式(以便对协议进行反向工程)POST
- 以某种方式验证应用程序的用户。理想情况下,这将涉及OAUTH,例如使用Google凭据,但您已经明白了
- 如果有人得到了你的应用程序并对其进行了反向工程,那么你所做的一切都将消失。唯一有效的方法是用户验证
- 嵌入客户机证书(正如其他人所指出的)在这种情况下对您毫无帮助。如果我只是反向工程你的应用程序,我也有你的客户端证书
- 验证后端上的帐户并监视其异常使用情况
POST
(或GET
)请求所有应用程序查询(到您的服务器)。这一点,再加上SSL,应该可以阻止你们随意的窥探者
Edit2:似乎我错了,因为
POST
比GET
更安全。这个答案很有助于指出这一点。因此,我想您可以在这里互换使用GET
或POST
。我们使用RestEasy作为保护公开的RESTful Web服务的一部分。应该有很多例子,但这里有一个可能让你开始
您还可以使用OAUTH:
究竟为什么会有人投票关闭此应用程序?我明白了,我不需要让它作为一家银行变得安全:)我只想至少限制或阻止人们使用API的最可怕的方式。@Pjotr那么是的,SSL和将所有有效负载包装在
POST
请求中应该满足您的需要。我只是想指出它可能出错的地方。如何使POST比GET更安全?我明白了,谢谢:)为了确保我正确理解您的意思,您告诉我使用POST方法从我的应用程序发送所有数据,对吗?(这就是您所说的有效负载?)使用SSL时,不需要包装所有信息输入POST请求。SSL加密整个请求体,包括路径和查询字符串。我只需要一些基本的安全性:)所以你说的是,我可以从iOS应用程序发送一个参数:“MyMagicKey”:“MagicNumber030349”,并检查它在我的web应用程序中是否匹配?是的。当然,这只提供了非常基本的安全级别,因为窥探这些请求非常简单。如果你使用https,那么要想弄清楚它就要困难得多(但仍然很有可能,只是需要高于平均水平的技能)。在https中,整个请求都是加密的,而不仅仅是url。嗯。。。显然是的,您连接到的地址未加密。如果最终用户二进制文件不受检查(是吗?)。如果不是,那么从该端提取路径可能比尝试解密tls更容易。复杂的路径只需要被破坏一次,他就又回到了不安全的协议中。@ccoakley说得对。然而,我的意思是,不要使用比tls更容易猜测的url,也不要从iphone中提取二进制文件。