1

我正在开发一个 Web 服务,我可以知道哪个最终用户当前正在执行请求,这一点非常重要。因此,从本质上讲,我需要一个隐式用户(或者甚至更好的是,用户的设备)标识。

我的 Web 服务不需要身份验证,用户可能会在他们的移动设备和我的 Web 服务之间放置一个代理服务器,并通过该代理服务器路由他们的所有流量。我不想禁止用户这样做,因为可能有很多原因,但我仍然想知道当前正在连接哪个设备。

也许需要一些密码学?

4

2 回答 2

1

执行此操作的标准方法是首先将 HTTPS 用于 Web 服务。这意味着服务器将对客户端进行身份验证,并且连接将被加密和验证。

一旦服务器通过客户端身份验证并且连接被加密和身份验证,您可以轻松地继续添加一种方法来向服务器验证客户端。最简单的方法是在每个请求中包含纯文本用户 ID 和密码。这是安全的,因为客户端知道它们将被发送到正确的服务器,并且连接是加密的。

配置良好的代理服务器将允许 HTTPS 流量的隧道。这应该不是问题。

于 2012-03-05T09:32:48.620 回答
0

在我看来,您正试图只允许一个应用程序访问您的 Web 服务。一种方法是使用客户端身份验证的 TLS。为此,客户端(您的应用程序)应该拥有自己的私钥证书对,并且服务器仅在证明私钥的所有权时才允许访问。它使用与服务器的默认验证完全相同的 PKI,只是相反。

这样做的好处是客户端身份验证是一种传输层协议,因此您不需要在应用程序本身中添加额外的安全层;无法访问任何受 TLS 保护的 URL。缺点是您有一个更难以设置的协议,并且密钥分发变得有点困难(如果您按照 Henrick 的建议使用令牌身份验证,那么您将不得不安全地分发令牌......)。

大多数应用程序服务器应该能够处理客户端身份验证。“客户端认证的 TLS 握手”下的更多信息。

于 2012-03-07T16:40:38.997 回答