独立休息服务的Spring Boot安全性

时间:2020-03-03 19:03:51

标签: java spring-boot authentication spring-security oauth-2.0

假设我正在构建一个具有端点的Spring Boot REST服务

/users/myself
/users/myself/books

我有用户和书籍存储在数据库中。

当然,您需要通过身份验证才能访问这些资源,但是每当我搜索“ Spring Rest安全性”时,它基本上就为您提供了三种选择

  1. 基本身份验证
  2. OAuth2
  3. JWT令牌

您几乎看不到有人提议使用会话进行身份验证,这对我来说毫无意义,尤其是在小型独立服务中。这就是原因:

  1. 基本身份验证从来都不是身份验证的好主意,因为这需要将username:password存储在某些存储中以保持用户身份验证。
  2. 在没有专用授权服务器的情况下,OAuth2似乎无法使用。在Spring Boot应用程序中具有内置的授权服务器对我来说似乎是过大的,并且与会话无关。
  3. 如果您确实创建了无状态的JWT令牌,则将带来大量安全问题-无法撤消该令牌。如果您在数据库中保留一个令牌列表,则它不再是无状态的REST服务,并且本质上类似于会话,只是您必须构建大量的自定义逻辑,以使其在Spring的会话处理出现时才能工作。

那为什么不使用会话进行身份验证呢?

1 个答案:

答案 0 :(得分:0)

通常,动机是围绕API客户端的安全性以及它们与API的连接方式。尤其是当他们是公共客户时,现代安全可能成为热门话题。

  • 浏览器用户界面
  • 移动用户界面

OAuth技术可以潜在地简化和外部化您的安全性,例如在我的initial tutorial中,UI或API中的安全代码几乎为零。该API是无状态的,并且状态已外部化为低成本和高可用性的Cloud Authorization Server。

采用正确的设计,令牌的寿命很短(不需要撤销),并且您编写的代码将比使用会话时简单得多。它将支持集群环境中的现代托管,并且更加便携。

在架构上还有很多其他好处-尽管您认为技术上存在挑战是正确的。因此,通常情况下是选择时间进行这种跨越并与您的利益相关者达成共识。