Spring REST服务,注册用户,认证
Posted
技术标签:
【中文标题】Spring REST服务,注册用户,认证【英文标题】:Spring REST service, register user, authentication 【发布时间】:2017-09-14 05:37:06 【问题描述】:我们的项目由 Java 后端(spring web 应用程序)和 ios 和 android 客户端应用程序组成。现在我们需要将客户端应用程序的身份验证添加到 Java 后端。这个想法是第一次使用外部 Web 服务注册用户。在这一步,用户提供完整的凭据(登录名和“大”密码)并选择一些 PIN 以进行进一步授权。在该主要步骤成功完成后,用户应该能够使用他的登录名和 PIN(他之前自己选择)进行身份验证。这些登录名和密码应该存储在我们的数据库中。我们还应该能够在必要时销毁该“会话”和 PIN。我们预计 Web 应用程序将拥有多达 10000 个注册用户,同时多达 1000 个用户同时在线。
我们也不打算使用任何单独的身份验证服务器,我们计划将安全性嵌入 Web 应用程序(后端)本身。
我一直在研究两种不同的方法。首先是通常的 spring @EnableWebSecurity 方法。这看起来很简单,但有人说它会创建“会话”,这对服务器不利。会话会消耗大量内存,对性能的整体影响会很差。这是真的吗?
另一种方法是使用 Spring Oauth2 实现。我没有时间好好研究它,这对我来说似乎有点矫枉过正。是否值得为我们的需要而学习? (顺便说一句,我们的时间不多了)。
我还需要一些适当的数据库结构以满足安全需求。
所以问题是,对于我们的情况,最好的方法是什么?是否有任何开源项目,解决类似的问题?我将不胜感激。
谢谢。
【问题讨论】:
我知道这是一篇很老的帖子,但我很好奇你决定做什么。我正在使用 iPhone / Android 前端应用程序在 Spring Boot 中开发应用程序。和你一样,我需要通过电子邮件/密码注册用户,然后让他们选择使用 4 位密码快速登录。 【参考方案1】:无论您使用何种技术进行身份验证,都需要会话来维护经过身份验证的用户的状态。您可以单独使用 Spring 安全性或与 Oauth2 一起使用。
为了简单起见,我建议您使用 Spring Security with Token 功能。
但是你可以找到一个关于 Spring Security 和 Oauth 的好博客。
Securing REST Services with Spring Security and OAuth2
如需了解更多信息,您还可以访问here
【讨论】:
至少提供一个拒绝投票的理由,以便我可以改进我的答案【参考方案2】:如果您要在会话中存储大量数据,会话应该只占用分配的内存。只要你不这样做,就不会有任何问题。您将需要根据您可接受的安全性和用户体验级别做出自己的身份验证决定,没有一个“正确”的答案。 Spring 安全性和会话已经在这里How can I use Spring Security without sessions? 讨论过。
【讨论】:
正如我与同事讨论的那样,会话不会占用太多内存,因为我们不想为用户存储任何数据。我们只需要知道什么用户通过了身份验证,或许还需要知道来自哪个设备。在安全性方面,我们希望我们的应用程序总体上是安全的,而不是矫枉过正。据我了解,spring 的基本安全性已经足够安全了。所以我们可能会坚持这种方法。以上是关于Spring REST服务,注册用户,认证的主要内容,如果未能解决你的问题,请参考以下文章
使用Spring Security和OAuth2实现RESTful服务安全认证
2022就业季|Spring认证教你,如何使用 Spring 构建 REST 服务