Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 独立rest服务的Spring引导安全性_Java_Spring Boot_Authentication_Spring Security_Oauth 2.0 - Fatal编程技术网

Java 独立rest服务的Spring引导安全性

Java 独立rest服务的Spring引导安全性,java,spring-boot,authentication,spring-security,oauth-2.0,Java,Spring Boot,Authentication,Spring Security,Oauth 2.0,假设我正在构建一个具有端点的Spring引导REST服务 /users/myself /users/myself/books 我在数据库中存储了用户和书籍 当然,您需要通过身份验证才能访问这些资源,但每当我搜索“SpringREST安全性”时,它基本上会给您三个选项 基本授权 OAuth2 JWT代币 你几乎看不到有人提议使用会话进行身份验证,这对我来说毫无意义,尤其是在小型独立服务中。原因如下: 对于身份验证来说,基本身份验证从来都不是一个好主意,因为这需要在某些存储器中存储username

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

/users/myself
/users/myself/books
我在数据库中存储了用户和书籍

当然,您需要通过身份验证才能访问这些资源,但每当我搜索“SpringREST安全性”时,它基本上会给您三个选项

  • 基本授权
  • OAuth2
  • JWT代币
  • 你几乎看不到有人提议使用会话进行身份验证,这对我来说毫无意义,尤其是在小型独立服务中。原因如下:

  • 对于身份验证来说,基本身份验证从来都不是一个好主意,因为这需要在某些存储器中存储username:password以保持用户身份验证
  • OAuth2似乎不适用于我们没有专用授权服务器的这种用例。在spring boot应用程序中有一个内置的授权服务器对我来说似乎是一种过火的行为,并且与会话相比没有任何优势
  • 如果您真的创建了一个无状态JWT令牌,那么这将带来大量的安全问题——无法撤销该令牌。如果您在DB中保留一个令牌列表,那么它就不再是一个无状态REST服务,本质上就像会话一样,除非您必须构建大量自定义逻辑,以使其在Spring的OOTB会话处理中正常工作

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

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

    • 浏览器用户界面
    • 移动用户界面
    OAuth技术有可能简化和外部化您的安全性,就像在my中一样,在UI或API中几乎没有安全代码。API是无状态的,状态外部化为低成本、高可用的云授权服务器

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


    从架构上讲,还有很多其他好处——尽管您认为存在技术挑战是正确的。因此,通常情况下,选择这种飞跃的时间并与利益相关者达成一致。

    这是否回答了您的问题?