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

Tig*_*ran 6 rest spring-mvc spring-security spring-boot

REST弹簧启动中用户的授权和身份验证的最佳实践是什么?

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

  • 用户调用auth API并传递名称/密码或cookie
  • 系统生成短生命令牌,保存在其数据库中.
  • 用户获取此令牌,更新他的cookie(因此Web应用程序中的JS可以读取并使用它)
  • 正在进行REST调用时,会传递cookie.在Controller中,提取令牌,检查到期时间,对数据库进行查询以验证令牌并获取用户ID.
  • 根据用户ID,REST将被授予或阻止.

这是正确的实施方法吗?在阅读有关弹簧靴安全性的文章之后,我的脑子里一片混乱.至少:session auth对我不起作用(REST是无状态的).我想为移动设备制作auth而不在那里存储登录名/密码.

在REST正文中传递此令牌是否有意义?什么是GET方法?

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

rhi*_*nds 3

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

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

基本上是这样的:

  • 设置一个标准的 html 登录页面,您可以使用它来用户登录应用程序
  • 设置 spring security 以在成功登录时使用身份验证令牌返回 cookie
  • 在您的移动应用程序中,嵌入一个 WebView(或同等内容)并加载此登录表单 - 允许用户通过该 WebView 登录,响应时抓取 cookie 并存储令牌(由于移动设备通常是单用户,您可以保留很长时间以节省移动用户必须不断登录的时间)
  • 将安全过滤器添加到 REST API 以针对令牌进行身份验证(例如,从移动应用程序在标头中传递令牌) - 然后您将能够对当前用户等使用正常的 spring 身份验证上下文。

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

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

使用 Spring security 的方法概述

代码及详细信息

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

  • REST 不应该使用 cookie。它是无国籍的。改为进行令牌授权。 (3认同)