Spring 引导 REST 令牌授权和身份验证最佳实践



在 REST Spring 引导中对用户进行授权和身份验证的最佳实践是什么?

我正在使用标准页面 + 移动 REST API 构建 Web 应用程序。我看了很多关于 Spring 安全性的文章,基本上其中大多数都采用了某种更合适的方法,可以允许或阻止 REST 调用。但是,就我而言,我有一些基于用户身份的身份验证逻辑。例如,有一个更新用户信息的/update API,用户可以更新自己,但不能更新其他人。最初我想使用下一个身份验证架构:

  • 用户调用身份验证 API 并传递名称/密码或 cookie
  • 系统生成短寿命令牌,保存在其数据库中。
  • 用户获取此令牌,更新他的cookie(以便Web应用程序中的JS可以读取和使用它)
  • 当 REST 调用正在进行时,会传递 cookie。在控制器上,提取令牌,检查过期,对数据库进行查询以验证令牌并获取用户 ID。
  • 根据用户 ID,将允许或阻止 REST。

这是正确的实施方法吗?在阅读了有关弹簧启动安全性的文章后,我脑子里一团糟。至少:会话身份验证对我不起作用(REST 是无状态的)。我想在不存储登录名/密码的情况下为移动设备进行身份验证。

在 REST 正文本身中传递此令牌是否有意义?在GET方法的情况下怎么办?

非常感谢您分享您的知识。

你找到解决问题的方法了吗?

我已经在其他地方回答了这个问题,如果您确定将来不想向其他开发人员/客户端开放 API(如果您这样做,那么您应该查看 OAuth),那么一个简单的基于令牌的解决方案将起作用。

基本上是这样的:

  • 设置一个标准的 html 登录页面,可用于用户登录应用程序
  • 设置 Spring 安全性以使用身份验证令牌在成功登录时返回 cookie
  • 在您的移动应用程序中,嵌入 WebView(或等效项)并加载此登录表单 - 允许用户通过该 WebView 登录,在响应时获取 cookie 并存储令牌(由于移动设备通常是单个用户,您可以保持相当长的时间以节省移动用户必须继续登录)
  • 向 REST API 添加一个安全过滤器以针对令牌进行身份验证(例如,从移动应用程序传递标头中的令牌) - 然后您将能够为当前用户等使用正常的 Spring 身份验证上下文。
谷歌

在这里建议这种方法:(编辑:谷歌似乎已经改变了我最初阅读的关于使用Google+登录和OAuth2.0的页面 - 我看不到他们的一般移动/API文档的链接,所以这里是在网络存档:))

我也在这里写了我的实现:

使用 Spring 安全性的方法概述

代码和详细信息

虽然这实际上只是一个实验/概念证明,但它可能对你的思考有用。

Cookie 方法似乎非常适合该用例。令牌可以与用户 ID 绑定。过滤器可以提取cookie并将用户ID作为标头传递给apis - 这应该照顾GET...

最新更新