使用 REST API 的 Spring Security 身份验证?

Posted

技术标签:

【中文标题】使用 REST API 的 Spring Security 身份验证?【英文标题】:Spring Security Authentication with REST API? 【发布时间】:2013-12-05 01:23:55 【问题描述】:

我有一个提供 REST api 的 Grails 后端。我的移动应用程序访问此 REST Api 以从服务器获取数据。身份验证、登录和注销应使用 Spring Security 完成。

这对桌面用户非常有用,因为我提供在我的服务器上构建的页面。

如何为我的 REST 控制器使用 Spring Security 才能使身份验证、登录和注销正常工作?

【问题讨论】:

【参考方案1】:

如果您提供的是 REST API,则可能不需要实现登录和注销。在身份验证方面,通常最简单的做法是使用 HTTP Basic。 Spring Security 开箱即用地支持 Basic,所以这对您来说应该不是问题。

这是 Erwin Vervaet 的博客中关于 setting up Grails to use HTTP Basic authentication 的精彩读物。

【讨论】:

为什么我不需要实现登录等? 因为使用 HTTP Basic,每次请求都会将用户名和密码传递给应用程序,从而使身份验证机制无状态。当您拥有无状态应用程序时,实际上没有登录或注销的概念。服务器可能会选择缓存实际的身份验证(例如在内部使用会话),但缓存与状态不同。 好吧,看起来很简单。如果我在每个请求上发送密码,这不是安全问题吗?密码应该明文发送还是加密发送? 您肯定需要通过 SSL 发送用户名和密码。【参考方案2】:

请看How does Spring Security sessions work? 使春季安全会议有意义。您的移动应用程序不会像桌面浏览器那样为您提供 cookie。因此,您可以考虑在首次登录后在每个移动请求中包含 jsessionid,这是为了利用 Spring Security 中的完整授权和身份验证支持,而不是基本身份验证。

【讨论】:

你有这方面的例子吗?

以上是关于使用 REST API 的 Spring Security 身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Security 保护移动 REST Api 足够了吗?

如何使用 rest-api 执行 Spring Cloud 任务

在使用spring执行rest api之前有啥方法可以验证令牌

使用 Spring Boot 和 JWT 保护 REST Api

使用 Spring Security 保护 REST API

Spring 安全 REST API