如何强制通过http客户端调用restful服务? 考虑事项:

如何强制通过http客户端调用restful服务? 考虑事项:,rest,security,http,asp.net-web-api,httpclient,Rest,Security,Http,Asp.net Web Api,Httpclient,首先,我正在寻找一个程序化/自动化的解决方案,而不是个人解决方案。我担心这个问题没有一个直接的答案,因为技术原因,所以我将检查任何解决方法来进行验证 脚本: 我有一个公共的RESTful服务,我的客户(第三方应用程序)可以使用它 它具有authentication basic(在标题中),POST具有一个参数,该参数在SHA-256中包含一个加密字符串,并在其他参数中发送数据,以便验证数据。 这个加密字符串是由我为每个客户提供的哈希键生成的,因为有些客户是他们之间的竞争对手。 无论如何 问题:

首先,我正在寻找一个程序化/自动化的解决方案,而不是个人解决方案。我担心这个问题没有一个直接的答案,因为技术原因,所以我将检查任何解决方法来进行验证

脚本: 我有一个公共的RESTful服务,我的客户(第三方应用程序)可以使用它

它具有authentication basic(在标题中),POST具有一个参数,该参数在SHA-256中包含一个加密字符串,并在其他参数中发送数据,以便验证数据。 这个加密字符串是由我为每个客户提供的哈希键生成的,因为有些客户是他们之间的竞争对手。 无论如何

问题: 一些客户直接从ajax访问服务,而不是使用服务器端http客户端。他们在javascript中使用hashkey和user/pass,请注意我的建议,他们的代码中没有任何更改。因此,我们无法在生产环境中启用它们

问题: 在不检查URL引用程序的情况下,验证调用是否来自服务器端是可能的(我怎么做?)

正如注释所示,我在C#中使用WebAPI2.2,但我认为我可以自己编写代码,因此任何没有代码的答案都是有用的

恐怕不存在任何答案,因为客户都是一样的,但任何解决方法或想法都会被精确化


很抱歉,我的英语和对HTTP客户端的了解都很差。

如果您能描述一下为什么客户使用ajax会出现问题,那么一般的解决方案就更容易猜测了。例如,您可以创建注册服务,其中您的客户必须指定其IP,以便您可以将其列入白名单,或者您可以创建所有客户都应该使用的客户端身份验证库

检查是否没有
Referer
标头,或者
User-Agent
标头不包含任何已知的浏览器名称如何?一点是,您可以通过检查
request.IsAjaxRequest
上的
DelegatingHandler
来检查请求是否为ajax请求,从而保护web api免受ajax攻击,不过,这可以部分解决您的问题。是的,我更喜欢@Aurélien的上述评论来增加更多的限制。多亏了这两者。他们真的是商品走道!谢谢你的想法。我不能否认IPs,因为它们是动态的,而且库违反了“服务休息”原则。