java - 如何通过基于 token 的身份验证来保护 Rest Web 服务?

标签 java security authentication spring-security jax-rs

我使用 Jersey 实现创建了一些休息服务。 出于安全考虑,任何人都可以调用服务。所以我决定使用基于 token 的身份验证系统。 我在 spring security 中编写了一个过滤器,它会在每个请求到达服务器之前对其进行处理。

创建了一个登录服务,以便用户可以通过传递有效凭据的用户名和密码来调用该服务,它将生成访问 token 和到期日期,并将其保存在 Hashmap 和 DB 中,并作为响应返回给用户。

对于其余服务,用户必须在 header 中传递生成的 token 才能访问 JAX-RS 服务。

所有这些过程都是由我们编码的,即 token 的生成、存储和过期。

由于我们在市场上有一些安全API,例如oauth1,oauth2,通过上述方式为rest服务提供安全性好吗???

oauth api 能满足我的要求吗?如果是,请指导我如何实现这一目标?

请帮我提出宝贵的建议??? 提前致谢。

最佳答案

在开始使用我们的 REST API 之前,我们也处于类似的情况。唯一的区别是我们没有现有的代码。所以基本上我们看到了 2 个选择

  1. 运行我们自己的 token 处理,这是您已经拥有的
  2. 使用现有的东西,即 oauth2

我们的主要要求是通过 token 进行身份验证,我们更喜欢现有的解决方案。所以我们只是以 spring-security-oauth2 的形式运行 oauth2,即使我们没有使用整个 self 授权的东西。

  • 我喜欢但可能在自己的实现中错过的是 token 通常标识用户和客户端组合,并且客户端也可以拥有权限。很高兴在我们的 REST API 中拥有这一额外的安全层,这样我就可以在触及我们的一行代码之前尽早阻止。

  • 其经过验证的代码以 spring-security-oauth2 的形式运行,并且像 Spring 的大部分内容一样可定制。示例:在我们的第一个版本中,我们确实使用提供的 JdbcTokenstore 来存储 token ,但随着需求的变化,我们只是编写了自己的代码并在配置中进行了切换。

  • 至少使用 spring-security-oauth2 的缺点是整个授权流程通常基于 Web,并且需要客户端、用户和我们的应用程序之间的通信。由于这不适用于我们的客户,我们必须自己触发 token 生成等,这在 spring 中是可行的,但需要一些代码探索:-)

如果我必须用 java 再次构建它并且已经使用 spring,我会再次使用 spring-security-oauth2 和 oauth 方式。但是,当我有一个现有的工作解决方案并且不需要任何 oauth 内容时,我会保留自制的解决方案。

关于java - 如何通过基于 token 的身份验证来保护 Rest Web 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199683/

相关文章:

javascript - 导入登录用户disqus评论

android - 使用 Google 身份验证从 Android 客户端使用 WebAPI2 站点

java - 何时选择 JMS API 而不是 UDP 套接字 API,反之亦然?

Java 日期解析不适用于 ET 时区,而适用于 IST

java - 什么情况下关闭流会失败?

android - 如何为 Android 添加红色的 Google+ 登录按钮? (不是白色那个)

java - 错误:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug

javascript - 如何使 JSON 数据只能由我的 java 脚本访问?

security - SPA架构问题

javascript - 我的 HTML 中包含的 JavaScript 库能否使用 cookie session 向我的网站发出请求?