验证Http请求的当前标准是什么(REST,Xml over Http)?

时间:2010-04-06 14:41:45

标签: rest restful-authentication

该标准应解决以下身份验证挑战,例如 -

重播攻击 中间人 明文攻击 字典攻击 蛮力攻击 假冒服务器欺骗

我已经查看了亚马逊网络服务,这是一种可能性。更重要的是,似乎有两种最常见的方法:

  1. 使用apiKey,它以类似AWS的方式编码,但是是请求的post参数
  2. 使用Http AuthenticationHeader并使用类似AWS的签名。
  3. 签名通常通过使用加密的共享密钥签署日期戳来获得。因此,此签名可以作为apiKey或in。传递 Http AuthenticationHeader。

    我想知道来自社区的选项,他们可能已经使用了一个或多个,并且还想探索其他我不喜欢的选项 考虑。我也会使用HTTPS来保护我的服务。

2 个答案:

答案 0 :(得分:2)

“身份验证”是指:   证明你是你说你是谁

“你是谁”是一个实体的身份(人,计算机用户,软件,服务器等......)

“identity”是每个实体唯一的属性(dba会在这里说主键

因此您必须证明以某种方式拥有该唯一属性。 当这里的实体是HTTP客户端时,HTTP Auth是向服务器证明其唯一身份的标准方式(由我们称之为用户名表示)。

它不会影响频道的安全性,这就是表示层(即SSL)的用途,并且需要部件之间的共享密钥。 “共享秘密”意味着两个部分必须知道它而没有其他人知道。这意味着这两个部分相互信任,不披露秘密或采取适当措施,如果它被披露(例如改变秘密)。

HTTP作为协议不包括其他方式进行授权,并将其留在其他层。例如,SSL可以通过使用公钥基础结构(证书和证书颁发机构)来证明双方的身份,而无需共享秘密。

最后:

  • 如果您可以在双方之间共享密钥,则可以使用HTTP Auth进行身份验证,使用SSL来保护通道。由各方安全地交换和存储共享秘密

  • 如果您不想分享密码,但双方可以就共同的受信任第三方达成一致,您可以说纯HTTP并使用SSL来保护渠道并证明其中一个或两个的身份使用PKI的各方(>证书)

  • 还有很多其他的可能性,但这两个是我能想到的最标准的,应该与大多数现有的HTTP软件/库/ whatevers兼容

  • 家庭酿造系统虽然在技术上有效,但要么会破坏公认的标准,要么是在应用层实施的临时(非标准)系统(以解决应在另一层解决的问题,bah)

如果不同意共享秘密(并保密)或同意信任其他人来处理这种独特性(PKI),就无法证明某事物的独特性。其他一切都只是实施细节。

答案 1 :(得分:1)

我不确定是否有一个标准。如果有,它可能是HTTP Auth,(基本或摘要)。前面提到的都是非常差的解决方案。

AWS是一个很好的例子,说明“自己动手”的身份验证解决方案如何工作,但是,当您谈论安全/身份验证时,自己动手游戏通常是除非你是安全/加密大师,否则这个想法。

我首选的选择实际上只是使用客户端证书。它负责身份验证和安全过程。不需要API密钥,因为证书本身标识了客户端用户。