小编典典

Spring Boot REST令牌授权和认证最佳实践

spring-boot

在RESTSpring Boot中对用户进行授权和认证的最佳实践是什么?

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

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

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

在REST主体本身中传递此令牌是否有意义?如果是GET方法怎么办?

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


阅读 434

收藏
2020-05-30

共1个答案

小编典典

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

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

基本遵循以下原则:

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

Google在这里建议采用这种方法:(编辑:Google似乎已经将我最初阅读的页面更改为有关使用Google+登录和OAuth2.0的信息-
我看不到其常规Mobile /
API文档的链接,因此在这里在网络档案中
:))

我还在这里编写了实现:

使用Spring安全性的方法概述

代码和详细信息

尽管这实际上只是一个实验/概念验证,但在您的思考中可能会很有用。

2020-05-30