通过服务传递身份验证

时间:2013-11-24 19:42:49

标签: security authentication

我有以下系统

A [user's client device]  <--->  B [my server]  <--->  C [user's private server]

所有相关软件均在我的控制之下。我的服务器 B 不存储用户数据,但需要使用用户私有服务器 C 中的数据生成报告。

我希望我的服务器 B 无法访问用户的服务器 C ,除非在客户端 A 下执行此操作请求。但是,客户端 A 除了通过我的服务器(B)之外,无法直接访问其服务器 C

如何创建一个身份验证方案,其中 A C 之间的所有数据都通过 B 传递,但 B 以后无法模仿 A

注意:

  • 基本假设是 C 是安全的(因为 B 对它的访问非常严格,并且从互联网上无法访问),但 B 可能会受到损害。因此,即使 B 受到了损害,我也只是希望攻击者能够访问在受到攻击时通过它的数据,但不会超过它。
  • B 需要运行有关数据的报告,因此不能只在 C 上加密并在 A 上解密。< / LI>
  • C 已连接到互联网,但通过VPN服务完全隔离它,除了一些特定连接,其中一个连接到 B
  • A 可以是任何用户设备 - 比如他们的手机或浏览器 - 所以可以用HTML实现的解决方案是一个加分,但我想不到一个。我可以使用JavaScript解决方案,如果需要,甚至需要客户端软件(即手机应用程序或Windows应用程序)。

2 个答案:

答案 0 :(得分:1)

您可以使用某种单一用途或可撤销令牌吗?永远不会从A给B完全认证,而是A给B一次代币。您可以使用只有A和C知道的密钥才能启用A来生成新令牌。您可以实际查看Amazon S3 auth,以获得一个很好的例子。

http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html http://docs.aws.amazon.com/AmazonS3/latest/dev/MakingRequests.html

基本上,当A发出请求时,它会创建一个临时签名令牌,让B代表它行事。亚马逊甚至允许您限制令牌可以授权的操作。

答案 1 :(得分:1)

将带有不可否认证书的S / MIME邮件数字签名给B; B可以在将签名消息转发给C之前验证签名,检查内容和记录报告信息。当C接收到具有有效签名的消息时,它执行消息中的指令。这些消息可以通过HTTPS传输以提供其他人的隐私,或者A可以使用B的证书在S / MIME层加密它,而B只会将解密但签名的内容传递给C。

或者,您可以在A和C之间的SSL连接上使用NULL密码套件和客户端身份验证,B可以将未加密的流量窥探为中间人。这可能需要对B进行自定义编码,以便从SSL记录中提取应用程序数据,而B将无法验证流量的完整性(但是,因为它会与A协商必要的密钥)。

这两种方法都依赖于客户端A,使用证书(或可信公钥,如果您使用PGP而不是S / MIME)。