如何通过基于令牌的身份验证来保护Rest Web服务?

时间:2014-06-13 07:15:17

标签: java security authentication spring-security jax-rs

我使用泽西实施创建了一些休息服务。  在安全问题中,服务可以由任何人调用。所以我决定使用基于令牌的身份验证系统。  我在spring security中编写了一个过滤器,它在命中服务器之前处理每个请求。

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

对于剩余服务,用户必须在标头中传递生成的令牌以访问JAX-RS服务。

所有这些过程都由我们编码,即令牌的生成,存储和到期。

由于我们有一些像oauth1这样的安全API,oauth2在市场上通过上述方式为休息服务提供安全性是好的吗?

oauth api是否符合我的要求。如果是,请指导我如何实现这一目标?

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

1 个答案:

答案 0 :(得分:1)

在开始我们的休息api之前,我们一直处于类似的位置。唯一的区别是我们没有现有的代码。所以基本上我们看到了两个选择

  1. 运行我们自己的令牌处理,即你已经拥有的
  2. 使用现有的东西,即oauth2
  3. 我们的主要要求是通过令牌进行身份验证,我们首选现有的解决方案。所以我们只是以spring-security-oauth2的形式运行oauth2,即使我们没有使用整个自我授权的东西。

    • 我喜欢并且可能在自己的实现中遗漏的是,令牌通常标识用户和客户端组合,并且客户端也可以拥有权限。很高兴在我们的休息api中有这个额外的安全层,所以我可以在我们的代码的一行之前尽早阻止。

    • 以spring-security-oauth2的形式,它经过验证的代码,可以像春天一样工作,并且可以自定义。示例:在我们的第一个版本中,我们使用提供的JdbcTokenstore来存储令牌,但随着需求的变化,我们只编写了自己的代码并在配置中将其切换。

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

    如果我必须使用java再次构建它并且已经使用spring,那么我将再次使用spring-security-oauth2和oauth方法。但是,当我有一个现有的工作解决方案,并且不需要任何oauth的东西时,我会保留自己开发的解决方案。

相关问题