【问题标题】:how to limit visitors to an api end point to those that are visiting my site如何将访问者限制为访问我网站的 api 端点
【发布时间】:2012-02-22 09:23:52
【问题描述】:

我的网站不需要登录。而用户采取的操作以调用 ASP.NET MVC 控制器操作方法结束。任何其他公司此时都可以调用这些端点并以这种方式使用我的 API。我想确保只有我网站上的用户才能访问这些 API。

我如何做到这一点?

添加说明:

假设我的网站是 consoto.com。我希望我的方法只有在最终用户在 consoto.com 上时才有效。现在,如果另一家公司或黑客建立了一个网站,比如 hackland.com,并且在他们的 javascript 中调用了我的方法,我希望它失败,因为他们的用户不在 consoto.com 上,而是在 hackLand.com 上。

如今,许多网站都提供对其核心功能的付费官方 API 访问。如果他们不实现这样的机制,其他人将可以选择调用实际站点使用的方法,而不是通过付费 API。什么会阻止 hackland.com 只使用 consoto.com 使用的方法而最终不为服务付费?

【问题讨论】:

  • “任何其他公司”是什么意思,什么 API?但您可以为您的网站设置 cookie 或会话并检查 cookie 或会话,因为您的网站是唯一可以让您完成交易的地方,但我认为您的网站不仅限于公司
  • 如果您不要求客户端登录(或以某种方式验证自己的身份(即秘密令牌、授权 cookie 等),那么您如何可靠地区分“您网站上的用户”和首先是“其他公司”?
  • @minus4 我刚刚添加了一个更好的解释。谢谢!
  • @BojinLi 请在帖子中查看我的编辑。希望我消除了困惑。谢谢!
  • 认为您可能有点偏执,我只在您的网站上看到 html,并且认为您的网站是 Internet 上唯一的网站,具有出色的数据输出可能有点小鬼说至少,如果这是 ajax 数据,即使您进行了身份验证,您也可以简单地使用多个工具进行保存。如果你确实有一些很棒的东西,那么也许你不应该向公众提供数据

标签: asp.net-mvc api


【解决方案1】:

我不是 %100 确定我理解您,但是,您似乎只想让您网站上的活跃用户能够调用某些操作方法。如果是这种情况,您可以使用[ChildActionOnly] 装饰操作方法。这将强制 ASP 仅允许在视图代码中使用 HTML.Action() 调用的操作。

控制器代码

[ChildActionOnly]
public ActionResult someAction()
{
    //return whatever you need
}

查看代码

Html.Action("someAction")

这应该可以防止没有积极查看网站的人在服务器上调用操作。

【讨论】:

    【解决方案2】:

    如果您不需要在您的站点上进行身份验证,则没有可靠的方法来实现这一点,那么只允许经过身份验证的用户调用服务器端操作。

    【讨论】:

    • 谢谢!这应该是一个足够普遍的问题。查看堆栈溢出。 (或就此而言谷歌本身)。他们不需要登录。所以我可以建立一个基本上调用他们的控制器方法和wala的网站,我的网站上有很多他们的功能。我会限制每小时来自任何特定 ip 的点击次数吗?
    【解决方案3】:

    一种方法是使用客户端必须提供给控制器的某种时间敏感令牌。

    1. 实现一个从用户那里获取一些凭据的 Web 服务,如果凭据有效,则返回一个基于服务器时钟散列的时间敏感令牌。应通过 SSL 调用此服务,以便在传输过程中保护凭据。

    2. 除了当前期望的任何其他输入之外,您的每个受保护控制器都将期望此令牌。然后,您将通过去散列验证令牌以获得存储在其中的时间。在这里,您可以决定您希望令牌的有效期,并选择接受的时间间隔。对于没有去散列属性或过期的令牌,返回一些错误结果。对于有效的令牌,返回正确的结果。除了令牌对时间敏感之外,您还可以实现使用计数场景,但时间敏感的方法更容易。

    这样,您的 API 控制器将不需要登录或 SSL。您的有效用户只需要事先从您那里获取令牌,然后使用它来调用您的服务。其他任何人都可以拦截这些令牌,但在可能很短的一段时间后它们不会有任何好处。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2019-08-05
      相关资源
      最近更新 更多