java - 在后端和其他服务之间保存用户登录的安全方法

标签 java web-services security rest key-management

我的 Java 应用服务器即将与 RESTful Web 服务集成,并将轮询其内容 (JSON) 以显示给我的用户。

我的用户使用他们的用户名/密码登录,然后我必须对其进行散列 + salt,然后在每次调用时转发到 Web 服务。 Web 服务获取散列/加盐的登录信息并对其进行身份验证(同样,每次调用)。

假设我无法更改 Web 服务端的任何内容,并且 Web 服务需要哈希/加盐登录凭据作为输入参数(以及 API 端点、HTTP 正文等) ,我可以在客户端采取哪些安全措施来保证用户提供的用户名/密码的安全。

我能做的最糟糕的事情就是把它们留在内存中。我还有哪些其他选择?

最佳答案

主要问题是“您想要针对什么进行保护”。您的用户已经知道他们的用户名和密码,因此您可以认为将它们保留在客户端基本上是安全的(至少,您不需要保护这些凭据以防止用户受到攻击)。加盐 + 散列密码可用作 Web 服务的凭据,因此它们与用户名/密码具有相同的值。您的用户已经将其密码发送到您的服务器,因此隐式地,它已经信任您的服务器。

结论:在这种情况下,将哈希值直接保存在内存中是相当安全的。

为了限制风险,您可能不应该将此哈希值存储在永久存储中(数据库、磁盘上的文件...)。

如果您想确保您的应用程序保持无状态,那么将此哈希值存储在客户端本身(在 cookie 中)并不是一个坏主意。我们可能会认为这在一定程度上降低了安全性,因为它也向客户端攻击开放了哈希。

这里真正的问题是什么?

真正的问题是客户端需要信任您的服务器,因此您需要承担确保保持信任的责任。这就是像 OpenId 这样的解决方案很有趣的原因:它们限制了对第三方的信任。

关于java - 在后端和其他服务之间保存用户登录的安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856092/

相关文章:

c# - Web 服务字符串中的 Null 被接收为 string.empty

Java:安全异常 - 非法 url 重定向

java - 确定 future 的时区转换

java - 将阿拉伯语存储在字符串中并使用 Java 将其插入数据库

java - 使用 GSON 反序列化通用容器与特定对象

azure - 保护 SSMS 连接和对 SQL Azure DB 的查询免遭中间人攻击

security - JWT(JSON Web Token)自动延长过期时间

错误 : Cannot find Symbol

asp.net - ASSX 处理程序返回 500 内部服务器错误

java - 跨多个 Web 服务的交易