假设我有一个简单的Java服务器应用程序,它实现了一些Web(REST
)服务。该应用程序在war
中部署为Tomcat
。现在我想添加用户身份验证,如下所示:
在服务器端添加带有用户名和密码的纯文本文件users
。用户需要在每次请求时发送用户名和密码,服务器会根据文件对其进行测试。
为了防止以明文形式发送密码,我正在考虑单向加密,就像/etc/passwd
中使用的那样。因此,用户需要在将密码发送到请求之前对其进行加密。
这种方法有意义吗?在Java中是否有任何“随时可用”的实现方法?
答案 0 :(得分:3)
Spring Security?这是一种保护Web应用程序的非侵入性方式,并且可以非常灵活地存储数据 - 即纯文本文件,xml或用户名和密码数据库。
答案 1 :(得分:1)
有很多方法可以给这只猫上皮。首先,您可能希望使用摘要式身份验证或基于SSL表单的身份验证,因为依赖客户端哈希可能会受到重放攻击。
我的建议是使用Spring Security。请查看HTTP摘要身份验证的this示例。
另一种方法可能是使用servlet容器为您完成此任务。看看here的摘要和基于表单的身份验证技术。
另外,您应该真正阅读有关网络应用程序的proper password storage技术。确保你使用像bcrypt这样足够复杂(又名慢)的散列算法,并为每个密码提供一个独特的盐。最后,通过使用HTTP摘要式身份验证(好的)或使用基于SSL表单的身份验证(更好),确保凭据的传输是安全的。
答案 2 :(得分:1)
例如,使用像Jersey这样的RESTful框架。但对于身份验证,您必须使用请求筛选器实现会话管理至于用户管理,你应该使用像MySQL这样的数据库。
答案 3 :(得分:1)
是的,有很多现有的良好身份验证解决方案,来自BASIC(通过SSL),OAuth,Kerberos,Spring Security等。我建议对WS-Security主题进行研究,因为有很多层(容器,过滤器) ,应用程序本身)可以进行身份验证。