我正在开发一个REST Web服务,特别是基于浏览器的请求的身份验证方法。 (使用JsonP或跨域XHR请求/ XDomainRequest)。
我在OAuth以及亚马逊的AWS上做过一些研究。两者的最大缺点是我需要执行以下任一操作:
还有哪些其他选择或建议?
答案 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