2011-08-16 28 views
4

这可能是最基本的问题,出于某种原因,但我有点傻眼。我正在设计一个有多个页面的宁静服务。点击一个默认链接会触发一个HTTP GET如何在RESTful系统中通过HTTP GET请求传递授权数据?

现在如何如何使用获取请求发送授权数据?它应该是url的一部分吗?我将被迫使用加密的查询参数创建一个丑陋的网址。有什么办法可以避免这种情况?

有没有什么在JavaScript/jQuery中可以发送这个数据'引擎盖',可以这么说?

在JQuery中,$.ajax方法需要username, password作为参数,以便授权数据可以与ajax调用一起发送。任何等价于非Ajax调用的东西,还是只剩下URL?

之所以有这样的方法:

  • 我希望用户能够点击“后退按钮”,然后返回到前一个页面。如果我在授权下做了$.get,然后跟着$('html').replaceWith(result),它会禁用后退按钮,对不对? (即不显示任何东西)

这也许应该是一个REST 101,但由于某种原因,它让我走投无路

(FYI:技术:jQuery的/的JavaScript /的Restlet/Freemarker的)

( PS:Cookies作为最后的手段吗?或者它们是最好的方式?:)

回答

2

使用GET请求,您仅限于请求标头和请求的查询字符串/网址。您可以使用HMAC方法或OAUTH,其中每个请求都是“签名”的。如果你这样做纯粹是客户端,那么共享秘密就不再是秘密了。

当然,这听起来像你已经正在使用的用户名和密码(我强烈劝阻,BTW)

如果你想在行动HMAC的例子POST请求,我相信亚马逊做(或)使用HMAC与S3进行交互,所以有很多示例代码。

最终,要让网络客户端在不公开某些“秘密”信息(例如密码或私钥/令牌)的情况下进行无状态身份验证非常困难。您可以向用户颁发临时令牌,然后通过验证请求头(IP地址等)在令牌生命周期内是否一致来备份。如果您向客户公开临时令牌,则可能需要您的验证机制为每个请求包含一个唯一的nonce

完全无状态的RESTful认证是不平凡的,如果你想在网络客户端做的要求,所以我不会把它REST 101 :)

+0

如果我仅限于请求头,那么如何我可以在获取请求中设置WWW-Authorization ...标题吗?这正是我想要做的。顺便说一句,我没有使用用户名/密码发出POST请求,但这些基本上都是“签名”的字段,供服务器对客户端进行身份验证。临时解决方案 – PhD

+0

@Nupul将'headers'和'beforeSend'选项签出到jQuery.ajax() – Matt

相关问题