【发布时间】:2019-02-04 14:37:12
【问题描述】:
我正在开发一个需要一些基本身份验证的肥皂网络服务。
所以我们的想法是只要求所有 web 服务方法都包含用户名和密码参数,然后验证这些值是否存在于我们的用户数据库中:
public String[][] someWebserviceMethod(String username, String password) throws FailedLoginException {
// Verify that user with username and password exists
//do database stuff and return data
}
这确实会在客户端引发问题。在用户最初登录到应用程序后,我们需要将用户名和密码以纯文本形式存储在内存中。这可以接受吗?如果不是,首选的方法是什么?
另外,我的网络服务将托管在 https 上。这是否确保客户端发送soap请求时密码被安全加密?
编辑:sessionID 会起作用吗?我从来没有在没有框架或网络服务器的情况下实现过它。也许是这样的:
- 客户端发送用户名和密码。
- 如果客户端有效,服务器返回随机字符串(sessionId)。
- 服务器在数据库中存储 sessionID 和时间戳
- 客户端将 sessionID 存储在内存中,不存储密码
- 客户端使用用户名和 sessionID 请求 Web 方法
- 如果存在用户名和 sessionID 的用户,并且时间戳在超时期限内,则授予访问权限并更新时间戳。否则强制重新登录。
【问题讨论】:
-
据我所知,散列应该在服务器端完成。在内存中存储密码时,没有一个好的解决方案。在 .Net 中有 SecureString,它在存储字符串的同时对字符串进行加密,但它也将密钥存储在内存中,因此它只是真正被混淆了,任何类似的 java 解决方案都是一样的。
标签: java authentication soap