2010-10-21 76 views
4

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

我在OAuth和亚马逊的AWS上做了一些研究。两者的一大缺点是,我需要做以下任一操作:

  • 商店秘密凭证在浏览器
  • 让一个服务器端脚本处理的签字仪式。基本上,我首先会向我的服务器发送一个请求,以获取特定的预签名JavaScript请求,我将使用它来连接到真正的REST服务器。

有什么其他的选择或建议?

回答

1

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

0

是的,jsonp呼叫认证非常困难,因为浏览器客户端需要知道共享密钥。

一个选项是使终点匿名(不需要验证)。这与其他安全整体(服务器对攻击是开放的,任何人都可以称之为)有关。但是,您可以通过仅暴露非常有限的资源和/或使用速率限制来处理此问题。通过速率限制,一个客户在一定的时间范围内只允许一定数量的呼叫。它通过识别客户端来工作(例如通过源码或其他客户端脚印)。

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

+0

什么是安全整体而? – BigJoe714 2010-10-21 16:58:42

+0

对不起...晚上打字/拼写,今天早上可能会用到这个术语漏洞;) – 2010-10-21 17:24:01

+0

我正在考虑与有限时间的多请求令牌一起使用..:S – Evert 2010-10-21 19:00:50

0

我还没有尝试过这个自己,但你可以尝试以下。(我敢肯定我会得到一些反馈)

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

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

你就可以使用以下网址的关键.. http://buchananweb.co.uk/security01.aspx