Java 具有基本身份验证的JAX-RS—如何安全地避免在每个请求上请求凭据?

Java 具有基本身份验证的JAX-RS—如何安全地避免在每个请求上请求凭据?,java,web-services,rest,authentication,Java,Web Services,Rest,Authentication,我有一个JAX-RSAPI(在Wildfly 8服务器上运行),它由基于Javascript的web应用程序使用。我们在学习的过程中不断前进,因此,对于此实现中可能存在的任何愚蠢之处,我们深表歉意 我们已经启动并运行了基于PBKDF2的密码存储的基本身份验证,但出于明显的原因,我们不希望用户每次单击web应用程序中的新导航项时都必须进行身份验证 在开发过程中,我们目前正在做的是在第一次输入凭据时获取凭据,并将其存储在BASE64编码的局部变量中,该变量用于所有后续请求(所有内容都通过HTTPS)

我有一个JAX-RSAPI(在Wildfly 8服务器上运行),它由基于Javascript的web应用程序使用。我们在学习的过程中不断前进,因此,对于此实现中可能存在的任何愚蠢之处,我们深表歉意

我们已经启动并运行了基于PBKDF2的密码存储的基本身份验证,但出于明显的原因,我们不希望用户每次单击web应用程序中的新导航项时都必须进行身份验证

在开发过程中,我们目前正在做的是在第一次输入凭据时获取凭据,并将其存储在BASE64编码的局部变量中,该变量用于所有后续请求(所有内容都通过HTTPS)

问题是,对于生产而言,这是一种可以接受的处理用户凭据的方式,还是一个大禁忌?

如果是不,你该怎么做?毕竟,使用会话在某种程度上违背了RESTfulWeb服务的初衷,而有状态Java会话bean在JAX-RS上似乎工作得不太好(根据我所读到的内容)

问题是,对于生产而言,这是一种可接受的处理方式吗 用户凭据,还是一个大禁忌

如果是通过HTTPS,就不是世界末日,但在客户端的内存中保留用户的凭据并不理想

如果是不,你该怎么做

您看过某种基于令牌的身份验证方案吗?例如通常,您会让用户使用其凭据进行一次身份验证,服务器将返回一个在特定时间段内有效的访问令牌。后续请求将使用访问令牌,而不是客户端的用户名/pw

毕竟,使用 会话在某种程度上与RESTful web服务的思想背道而驰 首先,有状态Java会话bean似乎也不起作用 使用JAX-RS(基于我所读到的内容)


和其他任何事情一样,我们也需要做出权衡。在我看来,让状态性潜入资源的业务逻辑是一个问题,但在每个请求中包含令牌之类的东西并不是什么大问题。尤其是当客户端和服务器端可能都将由较低级别的身份验证/授权代码来处理时。

我听说OAuth2的唯一一点是,它应该以一种安全的方式实现起来非常复杂,但我自己并没有深入研究它。我想让事情保持简单,做一些类似的事情怎么样?是的,这是一个相当复杂的规范。规范定义了几个不同的“流”,每个流都有各自的用途。你感兴趣的是。基本上,你发了一个帖子,然后取回一个访问令牌。如果您确实使用OAuth2,我强烈建议您使用JAX-RS实现提供的OAuth2支持,而不是尝试自己实现它。HMAC/SHA是一种可靠的基于令牌的模型,您可以在服务器代码中实现。看见