Api 2013年的两条腿auth标准-我们应该使用oAuth2吗?

Api 2013年的两条腿auth标准-我们应该使用oAuth2吗?,api,oauth,oauth-2.0,Api,Oauth,Oauth 2.0,如果我要实现一个新的服务器到服务器API,有哪些认证标准可以让其他人使用它变得更容易 理想情况下,我需要记录认证工作原理的文档越少越好(因此是标准),并且使用该服务的开发人员更可能使用标准库 但也有一些限制: 我不能保证该API将在HTTPS上可用,因为它可能位于承载多个网站(具有1个IP地址)的盒子上 它应该阻止重播攻击。。。因此,如果请求被网络上的另一个节点捕获,则同一请求不能重新发送到API 理想情况下,您应该只发送请求并获得响应。。。因此,无需首先联系API来获取一次性密钥(nonce

如果我要实现一个新的服务器到服务器API,有哪些认证标准可以让其他人使用它变得更容易

理想情况下,我需要记录认证工作原理的文档越少越好(因此是标准),并且使用该服务的开发人员更可能使用标准库

但也有一些限制:

  • 我不能保证该API将在HTTPS上可用,因为它可能位于承载多个网站(具有1个IP地址)的盒子上
  • 它应该阻止重播攻击。。。因此,如果请求被网络上的另一个节点捕获,则同一请求不能重新发送到API
  • 理想情况下,您应该只发送请求并获得响应。。。因此,无需首先联系API来获取一次性密钥(nonce)
  • 请求可能应该全部由发送方签名,以避免中间人类型的攻击
我怀疑SSL类型的设置有点太复杂了,因为大多数开发人员似乎不知道如何正确地实现它

在oAuth 1.0中:

但开发人员现在似乎正在关注oAuth 2,一种可能的解决方案是:

这首先要求您调用“/oauth/token”来获取令牌,但似乎没有太多关于其实际工作方式的规范(请参阅回复):

不过,有人提到在oAuth 2中使用MAC,这可能很有用。。。例如,执行一次授权以获取MAC(无登录详细信息),将此权限保持为半无限期,并重新用于所有后续请求:

还有一个关于HMAC的有趣的讨论,这意味着也没有一个关于如何工作的标准:


其他说明:

oAuth 1.0的实现、文档和讨论:

不幸的是,我对oAuth 2.0读得越多,就越赞同:

现在提供的是授权的蓝图 协议“这是企业的方式”,提供了“全新的 frontier销售咨询服务和集成解决方案”。


克雷格,问得好。我不是专家,但有一些想法

假设我们必须根据最低公分母编码,并使用您的需求列表(全部4项)作为我的设计种子,我想说以下几点:

  • 无SSL-由于无法保证SSL,因此必须采用公钥/私钥HMAC设计。让我们假设所有流量都是通过HTTP的,并且是无限可嗅探的,这意味着您无法在任何点通过线路将任何安全令牌或签名密钥传输给调用者,这意味着调用者已经需要它们了,这意味着一个私有签名密钥a-la,类似于AWS所做的(或两条腿的OAuth或我在上述文章中概述的内容)
  • 无重播-使用nonce阻止重播不需要服务器生成,您可以在此处使用任何值。nonce只需要是唯一的,需要包含在HMAC计算(签名)中,服务器需要记住它。例如,在客户端上生成一个UUID作为nonce,对请求进行签名,然后将其发送到服务器:
    ?sig=
  • (见#2,综合答案)
  • 请求必须全部由发送方签署。理解“什么需要签名”的关键很简单:HMAC(签名)计算中未包含的任何内容都可以由中间人(MITM)操纵。sig中包含的所有内容都是安全的,如果sig检查失败,则无法更改。这就是为什么OAuth规范(两个规范)都有关于字节排序参数、如何附加参数以及如何组合参数的迂腐规则,但是您需要对整个请求进行签名。一些API说了一些简单的事情,比如“获取整个查询字符串,并对其进行签名”——但有时签名中包含的内容太多,比如域名或端点,您可能不想包含在其中,并且将来需要对其进行更改(或者您可以这样做,您正在调用)
  • 正如您所知,让安全API设计立即痛苦的是您不需要HTTPS进行所有通信。一旦这样做,您就必须求助于解决方案,如HMAC/签名请求和nonce。如果您与服务器的通信是通过HTTPS安全的,并且双方都可以相互信任,那么生活会变得更好,您可以做一些事情,比如简单的基本身份验证,只需在每个请求中为服务器提供一个API_密钥,以识别发出请求的人(或什么人)


    希望有帮助!您似乎已经对此进行了很多研究,因此,如果您已经了解了所有这些,并且没有任何帮助,我很抱歉。

    UCC/SAN证书允许在一个IP上有多个主机。@i在您的权利范围内,但在我的情况下,它通常是一个服务器,承载来自不同客户端(站点所有者)的域,他们不想一起购买单个证书。还有SNI(服务器名称指示),但它从IE7或IE8(未真正测试)、Firefox 2、Opera 8、Chrome 6、Safari 2.1、iOS 4.0、Android 3和Windows Phone 7开始。。。所以到了那里。HMAC也是我学习的方式,所以我很高兴我们在同一页上。。。但是我的挫折是oAuth 2被提出作为所有问题的解决方案,但我真的不认为它是(太复杂,太通用,以至于每个人都无法以完全相同的方式实现)。。。我知道你的答案+1,但仍然希望有一个完全规范的标准。此外,由于服务器记录了当前时间(以避免重新播放),它可以在一天后删除,只要你在那里保留UTC时间戳(正如你在链接帖子中提到的)。。。。但我建议延长时间,这样你就可以记录服务器上发生的事情。@CraigFrancis你完全正确,OAuth 2已经变成了一个怪物,没有那么清晰的规范(为什么最初的一位作者离开了)。我知道你在看我
    http://provider.example.net/profile
        Authorization: OAuth realm="http://provider.example.net/",
        oauth_consumer_key="dpf43f3p2l4k3l03",
        oauth_signature_method="HMAC-SHA1",
        oauth_signature="IxyYZfG2BaKh8JyEGuHCOin%2F4bA%3D",
        oauth_timestamp="1191242096",
        oauth_token="",
        oauth_nonce="kllo9940pd9333jh",
        oauth_version="1.0"