ajax - REST Web 服务和 API key

标签 ajax web-services rest api-key

我有一个 Web 服务,我提供给用户使用我的应用程序数据库并获取一些信息。用户必须注册 API key 并在提出请求时提供该 key 。一切正常,但我如何检查注册 key 的用户是否真正提出请求,而不是他可能已将 key 提供给的其他人?

过去两天我一直在考虑想出一个解决方案,但到目前为止还没有。

最佳答案

您需要使用签名的请求。基本上它是这样工作的:

  • 你给你的用户一个 API key 和一个只有你和客户知道的“ secret ”(一个随机字符串)。
  • 每当他们提出请求时,他们都会为其添加一个“签名”参数。这个签名基本上是请求参数+API key +其他参数(见下文)+ secret 的散列。
  • 由于您也知道该 secret ,因此您可以验证签名是否正确。

  • 为避免重放攻击,您还可以在混合中添加随机数和时间戳。 nonce 只是一个数字,必须由客户端在每次请求时递增。当您收到请求时,您会检查您之前是否已经收到过此随机数/时间戳。如果您这样做了,您将拒绝该请求(因为这很可能是重放攻击)。如果没有,您将随机数/时间戳存储在您的数据库中,以便您以后可以查找它。

    这或多或少是在 OAuth 中签署请求的方式.在链接中查看他们的示例。

    关于ajax - REST Web 服务和 API key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027849/

    相关文章:

    c# - 可以与 WCF 交互的 Java Web 服务工具包

    rest - 如何设计api以RESTful风格通过非主键检索一个资源?

    java - Spring Security :Can not construct instance of org. springframework.security.core.userdetails.UserDetails

    javascript - SharePoint 2013 库检索所有文件名。休息API

    javascript - 不能将 ctrl + click 与 preventDefault 一起使用并返回 false

    javascript - 无法从 Firebase 数据库 Node.js/JavaScript 获取数据

    android - Web服务替代

    jquery - asp.net webforms ajax 更新 gridview

    ajax - #! url 出现在我的搜索结果的顶部

    c# - 这两个 XML 相同吗?