16

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

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

  • 当服务器创建令牌并将其发送给客户端时,服务器应该将其保存在 DB 或 Bean 中,使用诸如哈希表之类的东西作为用户 ID-令牌对?

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

4

3 回答 3

11

这是我的输入:

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

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

  • 我可能会看看 JAX-RS,看看它提供了哪些功能

于 2012-12-21T09:13:11.583 回答
6

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

它归结为:

  • 从服务器获取会话令牌以及用户的一些标识符
  • 使用令牌对请求中的信息进行加密
  • 还使用时间戳和 nonce 值来防止 MITM 攻击
  • 永远不要来回传递会话令牌,除非最初检索它时
  • 对会话令牌有过期策略
于 2013-03-06T17:37:36.323 回答
1

将令牌保存在 bean 或哈希表中不会持久。数据库将在执行之间持续存在。

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

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

于 2012-12-21T09:17:18.877 回答