如何限制访问者访问我的网站的api终点

时间:2012-02-13 00:00:29

标签: asp.net-mvc api

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

我如何实现这一目标?

添加说明:

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

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

3 个答案:

答案 0 :(得分:0)

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

控制器代码

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

查看代码

Html.Action("someAction")

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

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