【问题标题】:Web service user authentication - storing password on clientWeb 服务用户身份验证 - 在客户端存储密码
【发布时间】: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 会起作用吗?我从来没有在没有框架或网络服务器的情况下实现过它。也许是这样的:

  1. 客户端发送用户名和密码。
  2. 如果客户端有效,服务器返回随机字符串(sessionId)。
  3. 服务器在数据库中存储 sessionID 和时间戳
  4. 客户端将 sessionID 存储在内存中,不存储密码
  5. 客户端使用用户名和 sessionID 请求 Web 方法
  6. 如果存在用户名和 sessionID 的用户,并且时间戳在超时期限内,则授予访问权限并更新时间戳。否则强制重新登录。

【问题讨论】:

  • 据我所知,散列应该在服务器端完成。在内存中存储密码时,没有一个好的解决方案。在 .Net 中有 SecureString,它在存储字符串的同时对字符串进行加密,但它也将密钥存储在内存中,因此它只是真正被混淆了,任何类似的 java 解决方案都是一样的。

标签: java authentication soap


【解决方案1】:

是 HTTPS - S 代表安全,它会加密所有通信。但是你总是可以使用其他一些加密方法,如 MD5、SHA-1 和更常见的。如果您这样做是为了进行一些基本培训,可以将数据存储在纯文本 /json 中而无需任何加密,否则请查看这些哈希函数:

【讨论】:

  • 好吧,这就是我在 https 上的想法。不确定是否以某种方式发送肥皂请求可以忽略这一点。散列 - 您是在建议我在客户端对密码进行散列,然后根据数据库中的散列值检查散列值?与在服务器端进行哈希相比,这样做有优势吗?
  • security.stackexchange.com/questions/8596/… - 这个答案表明服务器端散列更好,因为如果你在客户端散列,那么散列后的密码基本上是纯文本。
  • MD5 和 SHA-1 不是加密算法。它们是散列算法,并且在今天它们都是不安全的。即使它们是安全的,它们也从未用于密码散列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多