Authentication 使用OAuth进行服务器到服务器身份验证?

Authentication 使用OAuth进行服务器到服务器身份验证?,authentication,authorization,oauth,Authentication,Authorization,Oauth,我目前正在指定我公司的新合作伙伴/公共API,这将是一个面向资源的RESTful web服务。目前缺少的一块拼图是身份验证/授权 这些要求是: 最初,它必须适用于服务器到服务器环境,例如,服务器应用程序必须能够识别自身,以便我们知道谁在调用API 将来,我们希望允许它模拟用户帐户,以便在有限的一段时间内,它将拥有一个表示用户帐户的令牌 OAuth似乎非常适合(2)获取令牌、重定向到用户输入凭据以进行授权的网站,然后使用标识/认证应用程序和用户的令牌的工作流 然而,从我所读到的内容来看,我不知道它

我目前正在指定我公司的新合作伙伴/公共API,这将是一个面向资源的RESTful web服务。目前缺少的一块拼图是身份验证/授权

这些要求是:

  • 最初,它必须适用于服务器到服务器环境,例如,服务器应用程序必须能够识别自身,以便我们知道谁在调用API
  • 将来,我们希望允许它模拟用户帐户,以便在有限的一段时间内,它将拥有一个表示用户帐户的令牌
  • OAuth似乎非常适合(2)获取令牌、重定向到用户输入凭据以进行授权的网站,然后使用标识/认证应用程序和用户的令牌的工作流


    然而,从我所读到的内容来看,我不知道它是否适用于(1)——即,是否有任何方法可以使用OAuth来识别调用的应用程序,而无需使用有效的用户特定令牌,从而无需重定向到网页以供他们输入凭据?

    是,令牌的生存期可以设置为在您这样说之前不会过期。因此,您需要(手动)完成身份验证和授权,并保存授权令牌以供以后使用


    (您可以用来帮助您完成手动部分,或者在您自己实现服务器时使用一个所谓的双腿OAuth.)

    < P>如果只涉及服务器到服务器的通信,我会考虑使用API密钥进行授权——就像BIT.LY或FrADFION.

    < P>格雷戈:

    我一直在致力于OAuth核心的扩展,我认为这可能会满足您的需要。我们希望根据我们自己的API编写应用程序,但我们觉得不允许我们自己的应用程序(作为服务提供商)直接从用户/消费者应用程序收集凭据没有多大意义,因为我们已经被认为是我们自己的可信方

    该扩展允许第1方、第2方,当然还有第三方(传统OAuth),同时使用令牌和机密的安全性,以及签名等。。。这是议定书规定的


    我们关于扩展的beta文档可以找到

    实际上有两种OAuth规范,三腿版本和两腿版本。三条腿的版本是最受关注的版本

    两条腿的版本完全符合您最初的需求,它允许应用程序通过共享密钥(非常类似于Amazon的Web服务模型,您将使用HMAC-SHA1签名方法)或通过公钥/私钥系统(使用签名方法:RSA-SHA1)向另一个应用程序授予访问权限。坏消息是,它还没有三条腿的版本那么受支持,所以你可能需要做更多的工作

    基本上,两条腿的OAuth只指定了一种对几个字段进行“签名”(计算散列)的方法,这些字段包括当前日期、一个称为“nonce”的随机数以及请求的参数。这使得模拟对web服务的请求变得非常困难

    OAuth正在慢慢地但肯定地成为这类事情的公认标准——从长远来看,如果您接受它,您将受益匪浅,因为人们可以利用各种可用的库来实现这一点

    让两条腿和三条腿同时工作现在有点棘手——但这是可能的(谷歌现在已经让它工作了)。

    2条腿的OAuth看起来很有希望。。。我会仔细研究一下,如果这是我需要的,我会将其标记为正确答案。请注意,OAuth还确保请求不能被篡改(在不使用HTTPS时也是如此)。@Arjan你能描述一下OAuth如何确保请求在不使用HTTPS时不能被篡改吗?@Sink,我想我是指“OAuth请求”(不是使用OAuth令牌的后续其他请求)。但即使这样,我也不知道我为什么要写…:-(可以写更多关于它的内容吗?OAuth是基于API键的(名称不同)。