将API锁定到特定URL

时间:2011-06-07 13:56:41

标签: c# asp.net web-services api

这可能是一个愚蠢的问题和/或简单的答案,或两者都没有。

我正在开发一个API,我想知道是否可以将其锁定到特定的URL /主机?

e.g。我的API位于一个网址上,它只响应来自特定网址的httpwebrequest。 www.apione.com仅响应www.apitwo.com

这可能吗?我一直在查看主机标题,但不认为有可能获得此信息。

由于

2 个答案:

答案 0 :(得分:2)

如果您的“API”作为Web服务,那么您可以使用“Request.UrlReferrer”来获取一个URI对象,该对象会告诉您请求来自的URL。然后,您可以在执行任何操作之前检查它是否与一个或多个预期值匹配。这不会阻止其他URL访问服务的请求,但您的Web服务不会响应这些请求。您还可以使用Request.UserHostAddress以类似方式通过IP锁定。请注意,这些做不同的事情。如果用户单击www.apione.com上的链接,则引用者将设置为www.apione.com,但IP将是用户的IP。您使用哪种方法取决于API的使用方式。例如如果有一些服务器端进程从www.apione.com运行,则引用者将没有多大帮助。引用者也很容易被欺骗。

答案 1 :(得分:0)

我意识到这是一篇非常古老的帖子,但我认为在未来的实施中添加一个简单,安全的做法来解决这个问题可能会有所帮助。

在页面上嵌入随机API访问令牌,链接到会话。如果您希望防止无意中的双重提交等,您可以选择在每个请求时刷新令牌。

在页面上

token = get random string, 8 to N characters long,
    hashing if you desire greater security
store token in session

write some html
embed the code in a script tag:
    var api_token = '<? echo code; ?>';

append api_token to all SOAP/JSONP requests
when the request returns, replace api_token with the new token

在服务中

read api_token
look for api_token in session
if token does not exist, exit
else, continue ...
generate new token
store token in session
append token to response

此基本策略有助于保护服务请求和验证链接点击。即,您可以高度确定 delete.aspx?id = 123 来自 manage.aspx 或其他什么,而不是来自某人的FB提要,推特,短网址服务等等。