Javaservlet:只允许自己的客户端
我正在开发一个用于java客户端的服务器端api(我也写过) api是用jersey(RESTful)编写的,并在tomcat服务器上运行。它提供的数据作为Json字符串传递给客户端,所有通信都通过Http执行 现在,我想确保只有我自己的客户端程序能够访问api(目前,作为其http,每个人都可以通过普通浏览器接收json数据)。因此,我正在寻找一种方法,用一个键或类似的东西将我的客户端程序“识别”到api。我首先考虑使用用户代理进行身份验证,但这很容易被复制。所以我需要一种动态变化的密钥或者类似的东西 有什么好办法 我在网上搜索了一下,但没有找到正确的答案(可能是错误的关键字?),所以我很高兴看到关于这个主题的每一个提示和/或链接Javaservlet:只允许自己的客户端,java,android,http,servlets,encryption,Java,Android,Http,Servlets,Encryption,我正在开发一个用于java客户端的服务器端api(我也写过) api是用jersey(RESTful)编写的,并在tomcat服务器上运行。它提供的数据作为Json字符串传递给客户端,所有通信都通过Http执行 现在,我想确保只有我自己的客户端程序能够访问api(目前,作为其http,每个人都可以通过普通浏览器接收json数据)。因此,我正在寻找一种方法,用一个键或类似的东西将我的客户端程序“识别”到api。我首先考虑使用用户代理进行身份验证,但这很容易被复制。所以我需要一种动态变化的密钥或者类
编辑:客户端程序是一个android应用程序。我想确保没有人正在创建一个类似的应用程序,并将我的服务器用于他的目的。如果攻击者拥有一个客户端,那么几乎没有任何安全性最终是不会被破坏的
一个很好的开端是双向SSL身份验证(客户端和服务器证书)。这是开箱即用的支持,只需要很少的代码更改。如果攻击者拥有客户机的许可证,则几乎没有最终无法破坏的安全性
一个很好的开端是双向SSL身份验证(客户端和服务器证书)。这是开箱即用的支持,只需要很少的代码更改。您不能这样做。任何人都可以让他们的浏览器看起来和你的客户端一模一样,因为它是在他们自己的计算机上运行的代码。典型的措辞是Facebook和其他具有应用程序功能的网站使用的“api密钥”。这些键通常有很长的长度。但是,通过http发送的所有内容对“internet”都是可见的,因此没有实际的安全价值。@abiessu api密钥听起来很有趣。唯一的问题是,正如您所提到的,每个人都可以从http包中读取其中一个Keay,然后简单地重用它。您不能这样做。任何人都可以让他们的浏览器看起来和你的客户端一模一样,因为它是在他们自己的计算机上运行的代码。典型的措辞是Facebook和其他具有应用程序功能的网站使用的“api密钥”。这些键通常有很长的长度。但是,通过http发送的所有内容对“internet”都是可见的,因此没有实际的安全价值。@abiessu api密钥听起来很有趣。唯一的问题是,正如您所提到的,每个人都可以从http包中读取一个Keay,然后简单地重用它。