Asp.net mvc 如何将api端点的访问者限制为访问我的站点的访问者

Asp.net mvc 如何将api端点的访问者限制为访问我的站点的访问者,asp.net-mvc,api,Asp.net Mvc,Api,我的网站不需要登录。用户执行的操作以调用ASP.NET MVC控制器操作方法结束。任何其他公司此时都可以调用这些端点,并以这种方式使用我的API。我想确保只有在我的网站上的用户才能访问这些API 我如何做到这一点 补充澄清: 假设我的网站是consto.com。我希望我的方法仅在最终用户在consto.com上时有效。现在,如果另一家公司或黑客建立了一个网站,比如hackland.com,并在javascript中调用了我的方法,我希望它失败,因为他们的用户不在consto.com上,而是在ha

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

我如何做到这一点

补充澄清:

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


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

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

控制器代码

[ChildActionOnly]
public ActionResult someAction()
{
    //return whatever you need
}
视图代码

Html.Action("someAction")

这应该可以防止不积极查看站点的用户在服务器上调用操作。

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

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

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

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


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

    什么是“任何其他公司”以及什么API?但是你可以为你的网站设置一个cookie或会话,并检查cookie或会话,因为你的网站是唯一可以提供会话的地方,你已经完成了交易,但我不认为你的网站仅限于公司,如果你不要求客户登录(或以某种方式进行身份验证)(即秘密令牌、授权cookies等),那么您如何区分“您网站上的用户”和“其他公司”呢首先?@minus4我只是添加了一个更好的解释。谢谢!@BojinLi请查看我在帖子中的编辑。希望我能消除混淆。谢谢!想想你可能有点偏执,我只在你的网站上看到html,并且认为你的网站是互联网上唯一一个拥有出色数据输出的网站,这可能有点让人讨厌至少,如果这是ajax数据,即使您进行了身份验证,您也可以使用多个工具进行保存。如果您确实有令人惊讶的东西,那么您可能不应该向公众提供数据谢谢!这应该是一个很常见的问题。看看堆栈溢出(或者谷歌本身)。他们不需要登录。因此,我可以建立一个基本上调用他们的控制器方法和wala的网站,我的网站上有他们的大部分功能。我是否可以限制每小时任何特定ip的点击次数?