使用简单令牌保护 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 API 端点?

使用客户端令牌保护 REST API 调用

将 REST 服务的 CSRF 令牌作为 Http 响应标头包含在内是不是安全?

用于 Azure 移动服务 (REST) 的 Live Connect 身份验证令牌

保护有状态的 Web 服务

在 JAVA ee 中使用 JWT 保护 REST 服务