使用简单令牌保护 REST 服务
Posted
技术标签:
【中文标题】使用简单令牌保护 REST 服务【英文标题】:Securing REST Service using a simple Token 【发布时间】:2014-04-05 13:40:55 【问题描述】:我的应用程序中有一个下拉列表,我使用 Ajax 调用为其填充数据,如下所示。这很好用,我的 Web API URL 是“http://example.com/Service.svc/json/getairports”
$(function ()
$.getJSON("http://example.com/Service.svc/json/getairports", , function (data)
$("#airport-departure-modal, #destination-airport-modal").html("")
$.each(data, function (index, element)
$("#airport-departure-modal, #destination-airport-modal").append("<option id=" + element["AirportCode"] + ">" + element["AirportName"] + "</option>");
);
);
);
但我担心的是安全性,因为任何人都可以使用查看源代码或开发人员工具查看此 URL。所以我想引入一个令牌并将其传递给像“http://example.com/Service.svc/json/getairports?token=SECUREKEY”这样的服务,但我想知道这如何解决问题,因为在视图源中也可以看到安全密钥。 所以我的问题是如何使安全密钥在客户端不可见或仅在启动 ajax 调用时动态传递?
仅供参考,我将在生产中使用 HTTPS,以便小心嗅探电线。同样不是这样,尽管 Web API 服务可能托管在单独的节点上,但该服务将仅在同一应用程序中使用。
请告知是否有针对上述情况的替代但简单的解决方案。我知道其他高级机制,例如 OAuth、HMAC、Amazon S3 等。但我只想有一个简单的解决方案。
【问题讨论】:
【参考方案1】:您到底想解决什么问题?您想阻止用户以编程方式调用您的 API 吗?如果您的浏览器可以得到一些东西,那么具有查看源功能的用户也可以得到一些东西 - 所以这是徒劳的。确实,听起来您想阻止 CSRF。
This answer 应该会有所帮助。
【讨论】:
以上是关于使用简单令牌保护 REST 服务的主要内容,如果未能解决你的问题,请参考以下文章
将 REST 服务的 CSRF 令牌作为 Http 响应标头包含在内是不是安全?