有没有办法检测从哪个来源调用 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。祝你好运!
有没有什么方法可以识别 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。祝你好运!