我使用泽西实施创建了一些休息服务。 在安全问题中,服务可以由任何人调用。所以我决定使用基于令牌的身份验证系统。 我在spring security中编写了一个过滤器,它在命中服务器之前处理每个请求。
创建了一个登录服务,因此用户可以通过传递有效凭据的用户名和密码来调用此服务,它将生成访问令牌和到期日期,并将其保存在Hashmap和DB中,并作为对用户的响应返回。
对于剩余服务,用户必须在标头中传递生成的令牌以访问JAX-RS服务。
所有这些过程都由我们编码,即令牌的生成,存储和到期。
由于我们有一些像oauth1这样的安全API,oauth2在市场上通过上述方式为休息服务提供安全性是好的吗?
oauth api是否符合我的要求。如果是,请指导我如何实现这一目标?
请帮我提出宝贵的建议??? 提前谢谢。
答案 0 :(得分:1)
在开始我们的休息api之前,我们一直处于类似的位置。唯一的区别是我们没有现有的代码。所以基本上我们看到了两个选择
我们的主要要求是通过令牌进行身份验证,我们首选现有的解决方案。所以我们只是以spring-security-oauth2的形式运行oauth2,即使我们没有使用整个自我授权的东西。
我喜欢并且可能在自己的实现中遗漏的是,令牌通常标识用户和客户端组合,并且客户端也可以拥有权限。很高兴在我们的休息api中有这个额外的安全层,所以我可以在我们的代码的一行之前尽早阻止。
以spring-security-oauth2的形式,它经过验证的代码,可以像春天一样工作,并且可以自定义。示例:在我们的第一个版本中,我们使用提供的JdbcTokenstore来存储令牌,但随着需求的变化,我们只编写了自己的代码并在配置中将其切换。
至少使用spring-security-oauth2的缺点是整个授权流程通常是基于Web的,需要客户端,用户和我们的应用程序之间的通信。由于这不适用于我们的客户,我们不得不触发令牌生成等自己,这是可以使用spring,但需要一些代码探索: - )
如果我必须使用java再次构建它并且已经使用spring,那么我将再次使用spring-security-oauth2和oauth方法。但是,当我有一个现有的工作解决方案,并且不需要任何oauth的东西时,我会保留自己开发的解决方案。