使用认证令牌的 Java REST 服务

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

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

  • 当服务器创建令牌并发送到客户端时,服务器应该将其保存在数据库中还是使用哈希表之类的东西作为用户身份令牌对保存在Bean中?

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


答案 1

这是我的意见:

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

  • 我会接受标头中的令牌。我会将其余服务放在HTTPS上,以便对请求进行加密,然后您无需担心在请求中手动加密令牌

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


答案 2

我最近写了一篇关于如何在 JAX-RS REST API 中设置基于角色的授权的博客,该方法既使用简单的会话令牌方法,又使用会话令牌作为共享密钥对请求进行签名的更安全的方法。

它归结为:

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