【问题标题】:Spring boot Restful API: Simple authenticationSpring Boot Restful API:简单的身份验证
【发布时间】:2017-09-14 23:30:44
【问题描述】:

我正在使用 Spring boot 编写 Restful API 端点。我想创建登录/注销功能。我不想使用 Spring boot 默认登录页面。

据我了解,一种简单而安全的方法是:

  1. 客户端向服务器提供用户名和密码
  2. 服务器发回验证码,用户可以使用该验证码对 API 端点进行后续调用
  3. 验证码在用户注销/经过一定时间后有效

这种身份验证方法是否有任何常规名称?

我不想使用 Spring Boot 登录页面。 Spring boot 是否有此身份验证方法的任何其他默认实现?如果是,它在哪里存储验证码。它是否存储在内存中?

【问题讨论】:

  • "我不想使用 Spring boot 登录页面。" --你还没有解释为什么。那你想换什么呢?
  • 我正在实现restful api。它没有用户界面。
  • 那么也许您正在寻找带有密码授权的 Spring Security OAuth2?
  • 我不打算使用任何第三方进行身份验证。不需要 facebook、twitter 等身份验证。这只是服务器和客户端之间的简单登录/注销。

标签: java spring


【解决方案1】:

您正在寻找无状态、基于令牌的身份验证。 Json Web Tokens (JWT) 就是其中的一种实现方式。

我写了一篇关于在 SpringBoot 中设置 JWT 以与 Angular 一起使用的教程。篇幅太长了——它是一个两部分,第二部分,处理 JWT 在http://chariotsolutions.com/blog/post/angular-2-spring-boot-jwt-cors_part2

如果你想要第一部分,它在http://chariotsolutions.com/blog/post/angular-2-spring-boot-jwt-cors_part1

【讨论】:

【解决方案2】:

我以前也有同样的问题。由于您正在实现一个 Rest API,因此默认情况下它应该是无状态的,这意味着您每次想要请求某些 API 时都应该对自己进行身份验证。如果您喜欢这种方式,也许可以尝试使用一些 CAS 系统来执行身份验证。这与您在问题中描述的几乎相同。 (这是我博客中简化的 CAS 的post)。

否则,您也可以考虑在您的 Rest 服务前面设置一个入口点或代理,在此代理中,您可以根据客户端提供的凭据为客户端设置一个令牌,然后要求客户端发送此令牌与请求。为令牌设置过期时间并在该时间后失效。

我认为在 Spring boot 中没有任何现有的实现,但是对于 CAS 和基于令牌的请求,您可以将 Spring Security 用于部分功能,例如TokenBasedAuthentication 已经在 Spring Security 中实现了

【讨论】:

  • 它与其他答案中提到的 JWT 有何不同?
  • 当我发布我的答案时,他还没有:) ,对于基于令牌的解决方案,我认为它们完全相同。
猜你喜欢
  • 2011-11-28
  • 2020-01-04
  • 2013-08-21
  • 2012-08-06
  • 2017-11-12
  • 2014-02-09
  • 2014-12-11
  • 2018-02-27
  • 2017-04-12
相关资源
最近更新 更多