java - JAX-RS - 在 RESTful Web 服务中进行身份验证并获取用户数据

标签 java web-services rest jersey jax-rs

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

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

我的问题是如何将此 userId 传递到/posts Web 服务?

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

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

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

最佳答案

听起来您正在考虑创建自己的安全性,而此时已有已建立的标准并有详细记录。我过去曾使用 OAuth 和 JWT token 来保护休息端点。根据您的具体要求,您也许可以使用基本身份验证。

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

更新:

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

“我的问题是如何将此 userId 传递到/posts Web 服务?”

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

关于java - JAX-RS - 在 RESTful Web 服务中进行身份验证并获取用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37614186/

相关文章:

Python - 通过身份验证将数据发送到 .NET Web 服务

java - EJB WebService (JAX-WS) 的 WSDL 的 URL 是什么?

java - 如何在不创建临时对象的情况下迭代嵌套的 TreeMap

java - Swagger-ui 不会从示例正文中隐藏只读嵌套对象

apache - 在tomcat上运行web服务的正确方法是什么

ruby-on-rails - Rails RESTful to_xml - 如何实现连接?

java - 通过 REST API 从 Java 下载 cognos 报告

c# - 访问rest web服务时,如何在android中使用HttpPost和NameValuePair传递参数值?

java - 使用 AppEngine 进行日志记录不起作用(无论是在 IDE 中还是部署中)

java - 如何从 Java 反射中获取 String 字段的值?