【问题标题】:Authentication in Apache Jersey without using Http-Authentication?不使用 Http-Authentication 在 Apache Jersey 中进行身份验证?
【发布时间】:2011-07-04 21:58:56
【问题描述】:
我正在使用 Apache Jersey 构建一个 RESTful Web 服务。现在我希望您需要对某些请求进行身份验证。使用典型的 REST 方法,身份验证应该通过 HTTP 身份验证完成。但是here 的帖子提到,更好的方法是使用 cookie。我认为讨论中有一些有效的观点。 (如何)我可以让我的 Jersey 身份验证与 Cookie 一起使用吗?我需要另一个框架吗?
【问题讨论】:
标签:
java
authentication
rest
jersey
restful-authentication
【解决方案1】:
Jersey 使用在封闭 Web 应用程序的 web.xml 中声明的身份验证机制,实际上是 HTTP 身份验证(通过 SSL)或基于表单的 Cookie 身份验证。
如果您想使用基于 cookie 的会话身份验证,用户必须首先通过 Web 服务进行身份验证以创建一个会话,该会话可用于检查他们的身份以供将来调用。 servlet 规范提供了一种使用 cookie 和使用 Web 表单的会话进行身份验证的标准化方法,但是它与 Web 服务类型的应用程序不兼容。因此,您可能想要制定一些自定义解决方案,让用户通过发布 XML 或 JSON 文档来提交他们的凭据。这种方法的一个问题是,如果用户在没有首先进行身份验证或会话过期之后执行对资源的调用,他们将需要被重定向或接收某种类型的错误代码。并非不可能,但它会增加您的网络服务的复杂性。
此时您不得不怀疑使用 HTTP Auth 是否不是 Web 服务风格应用程序的更好选择。我们最近使用 Jersey 和 HTTP Auth 作为身份验证机制构建了一个 Web 服务。然后我们在它之上构建一个 Javascript 前端。 Javascript 客户端总是将 Authentication 标头提交给 Web 服务,这样用户就不会遇到来自浏览器的 HTTP Auth 身份验证窗口。也许是两全其美。