使用身份validation令牌的Java REST服务

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

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

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

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

inheritance了我的意见:

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

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

  • 我可能会看看JAX-RS并看看它提供了哪些function

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

归结为:

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

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

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

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