如何识别执行请求的客户端应用程序

Sai*_*omp 5 java docker spring-boot traefik docker-network

我编写了一个可供多个客户端应用程序使用的 Java (Spring-Boot) 服务。对于维护/统计,我想记录哪些应用程序访问该服务。在不信任客户端的情况下如何识别客户端应用程序?

附加信息

  • 其中多个客户端应用程序位于反向代理 ( traefik ) 后面的 docker 容器中。
  • 其中多个客户端应用程序是由同一个人编写/维护的。这是相关的,因为客户端应用程序使用的请求代码可以重新用于另一个应用程序,而无需更改客户端 ID。
  • 我只是想阻止人们复制请求代码,因为它更快。在我看来,这个解决方案不安全,也不一定安全。认识到两个应用程序使用相同的标识符就足够了。

方法

这个想法可能是使用公钥身份验证并将私钥绑定到协议/IP/端口组合之类的东西。第一部分(公钥验证)将帮助对良好维护/统计感兴趣的客户。第二部分(绑定)在我眼中是一个死胡同,因为我不知道我可以用什么来绑定:

  • 协议:几乎总是相同的。
  • IP:由于 docker 主机很少,通常是相同的。
  • 端口:我现在不确定,我猜客户端请求是随机的。
  • Mac:网段不可预测。

有任何想法吗?

ama*_*nin 0

好吧,我有一个疑问,但在我看来,这就是User-Agent 请求标头的目的。

如果从浏览器(Firefox、Chrome 等)执行查询,您应该获得详细信息(如果没有代理,请在途中将其删除)。

但是,对于其他软件,这可能没有那么有用。例如,当使用标准 Java HTTP API 时,它将设置为“Java/Xx”。它需要在启动时使用命令行参数来自定义它(或调用System.property("http-agent", ...),我不知道有多少人为配置它而烦恼。

作为参考,我链接了以下文章。这是一个从 Spring Security 上下文检测客户端新设备的教程,它部分基于User-Agent

此外,在 Spring Boot 参考文档 中,提到了以下应用程序属性:

server.compression.excluded-user-agents= # list of user-agents to exclude from compression
Run Code Online (Sandbox Code Playgroud)

因此,Spring 开发人员认为这User-Agent是确定某些客户端特性的可行选择。