有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

REST API后端的java Web应用程序身份验证

我目前正在创建一个在后端(Java,特别是Jersey v1.18)使用REST API的web应用程序(HTML5、JS等)的早期阶段。将要存储的数据的性质是高度敏感的,所以我已经开始关注安全性,即使应用程序只是处于早期阶段。最终的目标将是拥有本地移动应用程序,并可能通过相同的API为外部客户端提供对数据的访问

到目前为止,在我的研究中,我已经确定了各种身份验证方法,包括HTTP Basic、基于令牌、会话cookie、OAuth、HMAC等。这里的关键组件是REST API主要由用户访问,而不是由其他应用程序或后端访问。因此,拥有一个“登录/注销”等价物很重要,这可以归结为用户级身份验证

到目前为止,HMAC身份验证看起来是最有希望的,因为我们目前还没有计划与任何OAuth提供商集成

我已经阅读了几十篇SO帖子,以及以下文章: http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ http://www.errant.me.uk/blog/2013/04/authenticating-restful-web-applications/(注意:这显然是不好的,因为不建议使用用户名盐渍)

理想情况下,HMAC似乎是一条可行之路,但我还没有看到处理共享秘密的推荐方法。使用一个资源来验证凭证,然后提供一个令牌/nonce与HMAC方案一起使用,这似乎是一个选项,但我质疑仅将此令牌/nonce严格用作令牌的优势

我知道RESTAPI的HMAC身份验证已经被详细讨论过了,但是当与用户期望的身份验证细节(用户名、电子邮件、密码等)结合使用时,是否有不需要预共享密钥的推荐方法


共 (1) 个答案

  1. # 1 楼答案

    这主要是一个基于观点的问题,但我愿意提供我的两分钱:只需要一个会话cookie

    如果您的主要受众是人类,并且您不需要与第三方集成,那么不要为OAuth操心。只需确保您的API仅通过HTTPS可用,并发出一个会话令牌,服务器可以在登录后撤销该令牌。严格地说,它不需要是饼干;我见过一些API,它们将令牌存储在HTML5会话存储中,并将其提供在授权头中或作为查询参数

    如果SSL设置正确,您的用户将在浏览器中获得预期的挂锁,并且您将不会受到您和客户端之间任何人的攻击。如果客户受到威胁,你就完蛋了。由于客户端不能保守秘密,因此更复杂的HMAC方案没有太多优势