【发布时间】:2020-06-16 05:32:18
【问题描述】:
假设我正在构建一个具有端点的 Spring Boot REST 服务
/users/myself
/users/myself/books
我有用户和书籍存储在数据库中。
当然,您需要通过身份验证才能访问这些资源,但是每当我搜索“Spring Rest 安全性”时,它基本上都会为您提供三个选项
- 基本认证
- OAuth2
- JWT 令牌
而且你几乎看不到有人提议使用会话进行身份验证,这对我来说没有意义,尤其是在小型独立服务中。原因如下:
- 基本身份验证绝不是身份验证的好主意,因为这需要将 username:password 存储在某些存储中以保持用户身份验证。
- OAuth2 似乎无法用于我们没有专用授权服务器的这种用例。在 Spring Boot 应用程序中内置授权服务器对我来说似乎有点矫枉过正,并且与会话相比没有任何优势。
- 如果你真的创建了一个无状态的 JWT 令牌,那么就会带来大量的安全问题 - 无法撤销令牌。如果您在 DB 中保留一个令牌列表,那么它就不再是无状态的 REST 服务,并且本质上就像会话一样,除了您必须构建大量自定义逻辑以使其在 Spring 中的 OOTB 会话处理时工作。
那么为什么不使用会话进行身份验证呢?
【问题讨论】:
标签: java spring-boot authentication spring-security oauth-2.0