基于浏览器的REST api身份验证

时间:2010-10-21 10:14:42

标签: rest oauth amazon-web-services restful-authentication

我正在开发一个REST Web服务,特别是基于浏览器的请求的身份验证方法。 (使用JsonP或跨域XHR请求/ XDomainRequest)。

我在OAuth以及亚马逊的AWS上做过一些研究。两者的最大缺点是我需要执行以下任一操作:

  • 在浏览器中存储秘密令牌
  • 让服务器端脚本处理签名。基本上我首先要求我的服务器获取特定的预先签名的javascript请求,我将用它来连接到真正的REST服务器。

还有哪些其他选择或建议?

3 个答案:

答案 0 :(得分:1)

嗯,这里唯一真正的答案是通过服务器代理,使用会话/ cookie进行身份验证,当然还使用SSL。很抱歉回答我自己的问题。

答案 1 :(得分:0)

是的,jsonp调用认证很难,因为浏览器 - 客户端需要知道共享密钥。

一个选项是使端点匿名(不需要身份验证)。这附带其他安全性整体(服务器可以进行攻击,任何人都可以调用它)。但是你可以通过暴露非常有限的资源和/或使用速率限制来解决这个问题。通过速率限制,一个客户端在一定时间范围内只允许一定数量的呼叫。它的工作原理是识别客户端(例如,通过source-ips或其他客户端占用)。

我曾尝试使用一次性令牌,但它们都有些失败,因为你有获取令牌本身的问题并且保护机器人多次检索令牌(这又需要速率限制)。 / p>

答案 2 :(得分:0)

我自己没试过,但你可以试试以下......(我很确定我会得到一些反馈)

在服务器端,生成时间戳。使用HMAC-SHA256,使用密码生成该时间戳的密钥,并在html中发送生成的密钥和时间戳。

当您对Web服务进行AJAX调用(假设它是另一台服务器)时,请发送密钥和时间戳以及请求。检查时间戳是否在5-15分钟之内.. 如果生成的密钥相同,则使用相同的密码和密钥进行HMAC-SHA256。 同样在客户端,您必须在拨打电话前检查您的时间戳是否仍然有效..

您可以使用以下网址生成密钥.. http://buchananweb.co.uk/security01.aspx