繁体   English   中英

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

[英]How to secure the Rest webservice by token based authentication?

我使用球衣实现创建了一些休息服务。 在安全方面,服务可以由任何人调用。 因此,我决定使用基于令牌的身份验证系统。 我在spring security中编写了一个过滤器,该过滤器可以在请求到达服务器之前处理每个请求。

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

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

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

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

oauth api是否适合我的要求。 如果是,请指导我如何实现?

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

在使用其余的api之前,我们一直处于类似的位置。 唯一的区别是我们不存在代码。 所以基本上我们看到了2个选择

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

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

  • 我喜欢并可能在自己的实现中错过的是令牌通常标识用户和客户端组合,并且客户端也可以拥有权限。 在我们的rest api中拥有这一额外的安全层是一件很高兴的事,因此我什至可以在碰到一行代码之前就提前阻止。

  • 以spring-security-oauth2的形式,其经过验证的代码可以正常工作,并且与spring的许多部分一样,其可自定义。 示例:在第一个版本中,我们确实使用了提供的JdbcTokenstore来存储令牌,但是随着需求的变化,我们只是编写了自己的代码并在配置中进行了切换。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM