如何在不维护 jsessionid 的情况下在 Spring Boot 中保护 RESTful API

Posted

技术标签:

【中文标题】如何在不维护 jsessionid 的情况下在 Spring Boot 中保护 RESTful API【英文标题】:How to secure a RESTful API in Spring Boot without mantain a jsessionid 【发布时间】:2016-10-07 11:04:38 【问题描述】:

我需要创建一个 SpringBoot RESTful API 以供 Web 项目或移动应用程序使用。

我的问题是如何在没有典型的基本授权的情况下保护它,该授权将“jsessionid”返回给网络浏览器并保持与它的会话。对于 web 项目来说这不是问题,因为它可以存储那个 jsessionid。但是如何保护对 API 的移动应用请求?

对不起我的英语。谢谢。

【问题讨论】:

你看过 Json Web Tokens 吗? 你是在问如何禁用 jsessionid,或者你应该用什么来替换它?后一个问题可能是题外话。 我的问题是关于如何“维护会话”但没有“jsessionid”。我认为创建一个授权令牌作为另一个答案中的另一个告诉将是解决方案。谢谢! 【参考方案1】:

您可以使用基本身份验证。它可以在每个请求上发送用户名和密码,但不需要在客户端保存 sessionid。

以下是具有基本身份验证的示例应用程序: http://www.baeldung.com/spring-security-basic-authentication

如果您在服务器会话中不保存任何内容,则不需要在客户端中保存 jsessionid。

【讨论】:

所以我不想在整个请求中发送用户名和密码。我只想登录一次,然后没有“会话”(因为 REST 的架构方面说 API必须是无状态会话),知道哪个用户正在发送请求,并通过所有 Spring 安全链(例如 PreAuthorize 注释)【参考方案2】:

architectural constraints of REST 之一是它必须是无状态的。

您的 REST API 不得有对客户端进行身份验证的会话。相反,客户端应该传递某种令牌,通常放在Authentication HTTP 标头中。

JWT 和 OAuth 2.0 都是非常流行的方法,如果您愿意,您绝对可以使用带有 OAuth 2.0 的 HTTP 基本身份验证。

这是一篇名为Stateless Authenticaiton with Spring Security and JWT 的文章。希望这会有所帮助!

【讨论】:

我认为这就是我要寻找的东西。一种模拟 sessionid 的令牌,所以我不必在所有请求中发送用户名和密码。我会有一个看这个!谢谢!

以上是关于如何在不维护 jsessionid 的情况下在 Spring Boot 中保护 RESTful API的主要内容,如果未能解决你的问题,请参考以下文章

p5.j​​s:如何在不改变背景或使用外部画布的情况下在画布形状上打孔?

如何在不使用 Eclipse 的情况下在 Android 上安装/替换

如何在不复制的情况下在多个进程中使用大型数据集?

如何在此扩展程序中创建一个按钮,在不使用操作按钮的情况下在主应用程序中打开特定视图?

在不使用过滤器和包装器的情况下删除 URL 中的 JSESSIONID

如何在不使用 AudioQueueRef 的情况下在 AudioQueue 中设置音量?