代码之家  ›  专栏  ›  技术社区  ›  Srikar Doddi

认证http请求(rest,xml overhttp)的当前标准是什么?

  •  2
  • Srikar Doddi  · 技术社区  · 14 年前

    该标准应解决以下身份验证难题,如-

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

    我已经看过amazon的web服务,这是一种可能性。更重要的是,似乎有两种最常见的方法:

    1. 使用apikey,它以类似aws的方式编码,但是是请求的post参数
    2. 使用http authenticationheader并使用类似于aws的签名。

    签名通常是通过使用加密的共享机密对日期戳进行签名来获得的。因此,此签名作为apikey或 http身份验证头。

    我想知道权衡来自社区的两个选项,他们可能使用了一个或多个选项,并且还想探索其他我没有的选项 考虑到。我也会使用https来保护我的服务。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Luke404    14 年前

    “认证”是指: 证明我你是你所说的人

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

    “identity”是每个实体独有的属性(dba会说 主键 这里)

    所以你必须 证明 以某种方式拥有那个独特的属性。 当这里的实体是一个http客户机时,http auth是向服务器证明其唯一身份(由我们称之为 用户名 )

    它不影响通道的安全性,这就是表示层(即ssl)的作用,它需要一个 共享的秘密 在零件之间。”“共同的秘密”意味着双方都必须知道,其他人都不知道。这意味着双方在不泄露秘密或在泄露秘密时采取适当措施(例如更改秘密)时相互信任。

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

    最后:

    • 如果可以在双方之间共享机密,则可以使用http auth进行身份验证,使用ssl保护通道。双方有责任安全地交换和存储共享的秘密

    • 如果您不想共享机密,但双方可以约定一个共同的受信任的第三方,则可以使用纯http并使用ssl来保护通道,并使用pki证明一方或双方的身份(>证书)

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

    • 自酿系统虽然在技术上是有效的,但它要么打破公认的标准,要么是在应用层实现的临时(因此非标准)系统(以解决应该在另一层解决的问题,bah)

    如果不同意一个共享的秘密(并保守秘密),或者不同意信任其他人来处理这个唯一性(pki),就无法证明某个东西的唯一性。其他一切都只是实现细节。

        2
  •  1
  •   nategood    14 年前

    我不确定是否有一个标准。如果有,可能是http auth(basic或digest)。上述两种方法都是非常糟糕的解决方案。

    aws是一个很好的例子,说明了“roll your own”身份验证解决方案是如何工作的,但是,当您谈到安全/身份验证时,roll your own通常是 坏的 除非你是安全/密码专家。

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