【问题标题】:API Security: how to restrict access by domain?API 安全性:如何按域限制访问?
【发布时间】:2011-05-29 23:20:38
【问题描述】:

我公开了一个简单的 API,需要确保只有授权用户才能访问它。我将提供一个 API 密钥来进行身份验证。但是,我还想将 API 密钥与某个域相关联(也就是说,只有在授权域中使用它时才能使用它)。

如何在 API 端检查它是否是从授权域访问的? HTTP_REFERER 显然不可靠。有什么建议吗?

【问题讨论】:

  • API是如何使用的?它是通过 JavaScript 访问的?
  • 有些可以通过 JavaScript 访问(因为它使用 GET),而有些则不能(因为它使用 POST)。
  • Javascript 可以做 POST 就好了。
  • 不是到不同的域,这就是 API 所在的地方。同源政策。对于 GET,jQuery 有 getJSON,这是一种解决方法。

标签: php security api


【解决方案1】:

您要公开什么样的 API?有许多不同类型的 API - 我假设您不会公开操作系统的 API...

假设您想公开一些 Web 应用程序的 API,您可以查看基于回调 URL 的 OAuth - 您可以只阻止某些域避免通过回调 URL 调用。

阅读更多关于OAuth的信息。

【讨论】:

  • 这是一个 Web 应用程序 API。 OAuth 计划用于第二个版本。有什么好的临时解决方案吗?
  • @StackOverflowNewbie 如果您现在不能使用 OAuth,只需使用该特定功能(需要需要回调的身份验证流程,如 OAuth)。在这个阶段对你来说是否足够的解决方案?
  • 你能详细说明你的意思吗?
  • @StackOverflowNewbie OAuth 所需要的(以及在不实现完整 OAuth 的情况下很容易实现的)是回调 URL 的工作方式。如果您的 API 设计方式需要将一些信息返回到某个回调 URL,那么您就在家中。它将像这样工作:1)外部应用程序使用适当的参数调用您的应用程序(简而言之,访问密钥和回调 URL 是必须的),2)您决定特定回调 URL 是否在您允许访问您的应用程序的域内, 3)你要么用一些额外的数据(例如请求令牌)调用特定的回调URL,要么不调用它,
  • 这要求客户端应用程序是可调用的,如果它是基于浏览器的 javascript,则可能不是这样。
【解决方案2】:

HTTP+SSL 是一个复杂的协议集,支持服务器和客户端的证书,可能可以在这种情况下使用,但不知何故我觉得这有点过头了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多