我正在使用Apache Jersey构建RESTful Web服务。现在我希望你需要对它的一些请求进行身份验证。使用典型的REST方法,身份验证应通过HTTP身份验证完成。但是帖子here提到更好的方法是使用cookies。我认为讨论中有一些有效的观点。 (如何)我可以使用Cookie验证泽西岛身份验证吗?我需要另一个框架吗?
答案 0 :(得分:6)
Jersey使用在封闭式Web应用程序的web.xml中声明的身份验证机制,实际上是HTTP身份验证(通过SSL)或基于表单的Cookie身份验证。
如果要使用基于cookie的会话身份验证,用户必须首先通过Web服务进行身份验证,以创建可用于检查其身份以供将来呼叫的会话。 servlet规范提供了使用cookie和会话使用Web表单进行身份验证的标准化方法,但是,该表单与Web服务类型的应用程序不兼容。所以你可能想要制作一些自定义解决方案,让用户通过POST一个XML或JSON文档提交他们的凭据。此方法的一个问题是,如果用户在未首先进行身份验证的情况下执行对资源的调用,或者在会话过期后,将需要重定向或接收某种类型的错误代码。并非不可能,但它增加了您的Web服务的复杂性。
此时您不得不怀疑使用HTTP Auth不是Web服务风格应用的更好选择。我们最近使用Jersey和HTTP Auth构建了一个Web服务作为身份验证机制。然后我们在它上面构建一个Javascript前端。 Javascript客户端始终将Authentication头提交给Web服务,以便用户永远不会遇到来自浏览器的HTTP Auth身份验证窗口。也许两全其美。