【问题标题】:Java REST service using authentication token使用身份验证令牌的 Java REST 服务
【发布时间】:2013-03-07 02:14:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我建议你看看 JAAS。它是一个 J2EE 标准,对于声明式身份验证/授权非常有用。
  • @Apache Fan tnx,我想 JAAS 会在我从客户端收到令牌并且我想验证他之后发挥作用?
  • 没有。您不必玩任何代币。在 JAAS 中,您可以只定义 URL 模式 .grant Principal com.tagish.auth.TypedPrincipal "user" { permission com.xor.auth.perm.URLPermission \ "/myapp/someService"; };
  • @Apache Fan 我更新了问题
  • 那么 JAAS 流程类似于 -1。 JAAS 可以配置一些用于用户标识角色映射的后端表。一旦请求到来,JAAS 将检查它是否已通过身份验证。如果不是,则用户被重定向到登录页面。 2. 如果用户通过身份验证,则根据 ACL 规则检查用户是否有权访问您的 URL

标签: java security rest jakarta-ee authentication


【解决方案1】:

这是我的意见:

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

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

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

【讨论】:

【解决方案2】:

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

归结为:

  • 从服务器获取会话令牌以及用户的一些标识符
  • 使用令牌对请求中的信息进行加密
  • 还使用时间戳和 nonce 值来防止 MITM 攻击
  • 永远不要来回传递会话令牌,除非是在最初检索它时
  • 对会话令牌制定过期政策

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 2013-06-22
      • 2019-04-07
      • 2013-02-06
      • 2017-09-10
      相关资源
      最近更新 更多