使用身份验证令牌的Java REST服务

时间:2012-12-21 09:09:00

标签: java security rest java-ee authentication

在我使用Java EE 6的Web应用程序上。我想将我的一些功能公开为Json Rest Service。我想使用身份验证令牌进行登录,用户将发送他们的用户名,密码和服务器将发回一个令牌,该令牌将用于授权用户在给定时间内进一步请求。

到目前为止,困扰我的几个问题;

  • 当服务器创建令牌并发送给客户端时,服务器是应该使用哈希表作为用户ID令牌对将服务器保存在数据库中还是Bean中?

  • 我是否可以使用任何特定于Java EE的API获得帮助,或者这必须是所有自定义代码?

3 个答案:

答案 0 :(得分:11)

继承我的意见:

  • 我会将令牌保存在数据库中,以防您需要重新启动服务器而不想丢失所有用户的令牌。您可以将其保存在内存中以加快请求速度,只有在内存中找不到时才在数据库中查找。

  • 我会接受标题中的标记。我会将其余服务放在HTTPS上,以便请求被加密,然后您不必担心在请求中手动加密令牌

  • 我可能会看一下JAX-RS,看看它提供了什么功能

答案 1 :(得分:6)

我最近blogged介绍了如何使用简单会话令牌方法和使用会话令牌作为共享密钥签署请求的更安全方法,在JAX-RS REST API中设置基于角色的授权。

归结为:

  • 从服务器获取会话令牌以及用户的一些标识符
  • 使用令牌加密请求中的信息
  • 还使用时间戳和随机数值来防止MITM攻击
  • 除了最初检索它时,不要来回传递会话令牌
  • 对会话令牌设置到期政策

答案 2 :(得分:1)

将令牌保存在bean或散列表中不会持久。 DB会在执行之间持续存在。

如果您打算使用REST,则可以将参数中的身份验证传递给方法,也可以传递给请求标头本身。加密是另一回事。我想这取决于系统的规模,以及它是多么开放。如果安全性是最重要的,那么是的,你应该找到某种形式的加密。

我使用Spring FrameworkSpring Security做了类似的事情。使用这些东西相对简单。编写自定义代码就是重新发明轮子。有很多框架可以帮助你。但是,您将获得框架的学习曲线。