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

时间:2014-12-25 23:46:32

标签: rest spring-mvc spring-security spring-boot

REST spring boot中用户的授权和身份验证的最佳实践是什么?

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

您是否找到了问题的解决方案?

我在其他地方已经回答了这个问题,如果你确定你以后不想打开API给其他开发者/客户(如果你这样做,那么你应该看一下OAuth)然后基于一个简单的令牌解决方案将有效。

基本上就是这样的东西:

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

谷歌在这里建议采用这种方法:(编辑:谷歌似乎已经改变了我最初阅读的关于使用Google+登录和OAuth2.0的页面 - 我无法看到他们的一般移动/的链接API文档so here it is in the web archive :))

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

Overview of the approach using Spring security

The code & details

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

答案 1 :(得分:0)

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