有没有办法检测从哪个来源调用 API?

Is there a way to detect from which source an API is being called?

有没有什么方法可以识别 API 是从哪个来源调用的?来源参考 IOS 应用程序,Web 应用程序,如页面或按钮点击(Ajax 调用等)。

尽管可以在调用 api 时保存像 (?source=ios 或 ?source=webapp) 这样的标志,但我只是想知道是否还有其他更好的选择来完成这个?

我也觉得这个要求很奇怪,因为一般一个App或者一个web应用被n个用户使用,那么监控那么多API调用是很困难的。

请大家提出宝贵意见

没有完美的方法来解决这个问题。指定一个特殊标志不会解决您的问题,因为消费者可以输入她想要的任何内容,而您无法确定它是否合法。如果您为不同的消费者发出不同的 API 密钥,这同样适用 - 您永远不知道他们是否决定切换它们。

我想到的唯一选择是分析 HTTP header 并查看您可以从中推断出什么。正如您可能知道的那样,典型的 HTTP header 看起来像这样:

您可以尝试查看所有来源的请求在您的情况下有何不同,并决定是否可以可靠地区分它们。如果您有能力开发客户端(即这不是 public API),您可以为不同的来源设置自定义 User-Agent 字符串。

但请记住,Referrer 不是强制性的,因此它不是很可靠,用户代理也可以被欺骗。所以这是一个聊胜于无的解决方案,但它不是 100% 可靠的。

希望这对您有所帮助,这里还有一个 similar question。祝你好运!