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

时间:2014-11-25 15:30:14

标签: java web-services rest authentication

我有一个JAX-RS API(在Wildfly 8服务器上运行),它是由基于Javascript的Web应用程序使用的。随着我们的进展,我们正在学习,所以对任何可能对此实施都很愚蠢的事情表示道歉。

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

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

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

如果它不是,你应该怎么做呢?毕竟,使用会话类似于开始使用RESTful Web服务的想法,并且有状态的Java会话Bean似乎与JAX-RS不太合作(基于我能够实现的目标)读取)。

1 个答案:

答案 0 :(得分:4)

  

问题是,对于生产来说,这是一种可接受的处理方式   用户凭证,还是大禁忌?

如果它是通过HTTPS而不是世界末日,但是在客户端的内存中挂起用户凭据并不理想。

  

如果这是禁忌,你应该怎么做呢?

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

  

毕竟,使用   会话有点违背RESTful Web服务的想法   开始时,有状态的Java会话Bean似乎也不起作用   与JAX-RS一起使用(基于我能够阅读的内容)。

与其他任何事情一样,需要做出权衡。 IMO,让状态蔓延到资源的业务逻辑是一个问题,但在每个请求中包含诸如令牌之类的东西并不是什么大问题。特别是当它可能由客户端和服务器端的低级认证/授权代码处理时。