【问题标题】:JAX-RS - Authentication and getting user data in RESTful web servicesJAX-RS - 在 RESTful Web 服务中进行身份验证和获取用户数据
【发布时间】:2016-06-03 12:16:33
【问题描述】:

我是 RESTful Web 服务的新手,我正在尝试使用 JAX-RS 设计我的第一个安全 Web 服务。但我有这个疑问。

想象一下,我有一个信使 API,其中有一个“/posts”网络服务,它会为调用它的用户提供所有帖子。所以我设计了一个基本的身份验证过滤器,它进行身份验证,如果是有效用户,它将请求传递给 /posts 服务,该服务为用户提供帖子列表。现在的问题是我的数据库中的用户有一个不向用户公开的用户 ID。在 /posts 服务中,我需要 userId 来获取请求用户的帖子。所以我的过滤器进行身份验证并获取登录用户的 userId。

我的问题是如何将此 userId 传递给 /posts 网络服务?

我现在的方法是将此 userId 作为请求标头信息添加到过滤器中,然后将其传递给 /posts 服务。

但我很困惑这是否是正确的方法,还是应该以其他方式优雅地处理这种情况?

请帮助我了解什么是最好的方法。

【问题讨论】:

    标签: java web-services rest jersey jax-rs


    【解决方案1】:

    听起来您正在考虑创建自己的安全性,而已经建立了完善的标准。我过去曾使用 OAuth 和 JWT 令牌来保护休息端点。根据您的具体要求,您可能能够使用基本身份验证。

    在安全性方面,您很少能比专家做得更好,所以如果您可以遵循标准,您可能应该这样做。另一个好处是下一个长期来的人有所有的文档和支持。

    更新:

    仅在请求中包含用户 ID 是不够的。任何知道其他人用户 ID 的人都可以伪装成该人并以其他用户的身份发布到端点。

    “我的问题是如何将此 userId 传递给 /posts 网络服务?”

    会话可用于存储内部用户 ID。如果您已经让他们使用会话登录,您应该能够从会话中提取用户 ID。如果您要使用 JWT(它是无状态的),您可以提取存储在令牌中的任何信息来完成同样的事情。

    【讨论】:

    • 我考虑将身份验证实施更改为 OAuth 或标准实施。由于身份验证是在过滤器中完成的,服务不应该被遵循什么样的身份验证机制所困扰。我唯一的问题是如何将用户 ID 传递给服务。您提到使用会话,但我一直在阅读 REST 资源是无状态的。如何创建会话,如果我也这样做,这是一个好习惯吗?这又不是一个有状态的吗?您能否提供您提到的 JWT 的链接。它可能很有用。
    • auth0.com/learn/json-web-tokens jwt.io REST 服务可以是无状态的,在有状态的应用程序中拥有休息端点也是有效的。至于创建会话,这将完全取决于您选择实现 Web 服务的语言。PHP 的会话管理与 Spring 不同。 Cookie 也是一种选择。
    • 感谢您的链接。
    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 2014-01-12
    • 2016-09-14
    • 2020-11-13
    • 2012-06-19
    • 2016-02-20
    • 2013-12-30
    • 2015-01-24
    相关资源
    最近更新 更多