2012-02-13 150 views
0

我的网站无需登录。以及用户在调用ASP.NET MVC Controller Action Methods时所采取的行动。任何其他公司都可以在这个时候调用这些端点,并以这种方式使用我的API。我想确保只有在我网站上的用户才能访问这些API。如何将访问者限制为访问我网站的访问者

我该如何做到这一点?

添加说明:

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

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

+0

你是什么意思“任何其他公司”和什么API?但你可以为你的网站设置一个cookie或会话并检查cookie或会话,因为你的网站是唯一可以让你完成交易的会话,但我不认为你的网站仅限于公司 – davethecoder 2012-02-13 00:11:56

+0

如果你不要求客户登录(或以某种方式验证自己(即秘密令牌,授权cookie等),那么您如何可靠地区分“网站上的用户”和“其他公司”? – 2012-02-13 01:00:50

+0

@ minus4我刚刚添加了一个更好的解释。谢谢! – Barka 2012-02-13 19:17:50

回答

0

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

控制器代码

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

视图代码

Html.Action("someAction") 

这应该防止未主动地调用服务器上的操作浏览该网站的人。

0

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

+0

谢谢!这应该是一个常见的问题。看看堆栈溢出。 (或者Google本身)。他们不需要登录。所以我可以构建一个基本上调用其控制器方法和wala的网站,我的网站上有很多功能。我是否会限制每小时任何特定IP的点击次数? – Barka 2012-02-13 19:25:34

0

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

  1. 实现Web服务,它需要一些来自用户的凭据,凭据是否有效,返回基于服务器的时钟散列时间敏感令牌。应该通过SSL调用此服务,以便在传输过程中保护凭据。

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

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

相关问题