我正在开发一个Web服务,我需要在GET方法中向服务发送用户名和密码。是否可以在uri中发送此信息,只要它通过像ssl这样的安全通道?换句话说,我可以使用/ users / {username} / {cleartext_password}吗?
编辑:对不起,我想我不清楚。 Web服务本质上只是一个用户名和散列密码的数据库。想象一个桌面应用程序,它将用户名和密码保存在远程数据库中。最终用户在应用程序中键入其用户名和密码,应用程序访问Web服务以对用户进行身份验证。
因此,应用程序需要向服务发送最终用户的用户名和明文密码。该服务将使用用户名和密码,并检查用户名和密码的哈希值是否与数据库中的用户名和哈希密码相匹配。应用程序本身必须在可以访问服务之前进行身份验证,但我只是想知道将最终用户的用户名和密码发送到服务以验证最终用户的最佳方法是什么。我不使用POST方法,因为我只是进行身份验证,因此不会更改服务器的状态。对困惑感到抱歉。
答案 0 :(得分:7)
这样做。
发送“密钥”和“摘要”。
“密钥”相当于用户名。
“摘要”是密钥的SHA1(或MD5)哈希值,URI和“共享密钥”或密码。
当服务器获得此信息时,它会根据所请求的密钥,URI和“共享密钥”或密码来计算它自己的摘要版本。无法匹配摘要是401错误响应。
答案 1 :(得分:0)
一般来说,这不是一个好主意......这些数据将存在于许多日志文件中,因此数据可能对不应该看到它的人可见。如果可以的话,至少应该在发送之前对其进行散列或加密。
以下是更详细的相关讨论...... Is an HTTPS query string secure?
答案 2 :(得分:0)
如果它通过安全通道,将用户名和密码作为明文发送是没有问题的。我只是建议不要通过不安全的频道将它们作为明文发送,而不是为每个请求重复发送它们。
您可以做的是首先对Web服务进行身份验证(通过ssl以明文形式发送用户名和密码),然后从服务器获取它将识别的令牌。然后在每个后续请求中发送该令牌。
答案 3 :(得分:0)
SSL会对URI进行加密,但绝对会看一些替代方案。
HTTP Basic Auth非常简单,并得到浏览器,网络服务器等的良好支持
它也不会以与URI相同的程度在日志文件中结束
注意:这只是一些纯文本HTTP标头,所以不建议不建议用于非SSL应用程序。