4

这可能是最基本的问题,出于某种原因,但我有点傻眼。我正在设计一个有多个页面的宁静服务。默认情况下单击链接会触发 HTTP GET

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

可以这么说,javascript/jquery 中有什么东西可以“在后台”发送这些数据吗?

在 JQuery 中,该$.ajax方法将username, password作为参数,以便授权数据可以与 ajax 调用一起发送。非 ajax 调用的任何等效项还是我只留下 URL?

采用这种方法的原因:

  • 我希望用户能够单击“后退按钮”并返回上一页。如果我$.get对授权做了 a 并遵循它$('html').replaceWith(result)会禁用后退按钮,对吗?(即,不显示任何东西)

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

(仅供参考:技术:Jquery/javascript/Restlet/Freemarker)

(PS:饼干是最后的手段。或者它们是最好的方法?:)

4

1 回答 1

2

对于 GET 请求,您仅限于请求标头和请求的查询字符串/url。您可以使用HMAC方法或OAUTH,其中每个请求都经过“签名”。如果您是在纯粹的客户端执行此操作,则存在共享秘密不再是秘密的问题。

当然,听起来您已经在使用用户名和密码发出 POST 请求(我强烈反对,顺便说一句)

如果您想要实际使用 HMAC 的示例,我相信亚马逊确实(或确实)使用 HMAC 与 S3 进行交互,因此周围有很多示例代码。

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

如果您希望 Web 客户端执行请求,则纯无状态 RESTful 身份验证并非易事,因此我不会将其称为 REST 101 :)

于 2011-08-16T20:15:27.587 回答