如果我要实现一个新的服务器到服务器API,有哪些身份验证标准可以让其他人轻松使用?
理想情况下,我需要记录的有关身份验证的工作方式越少越好(因此标准),并且使用该服务的开发人员更有可能使用标准库。
但有些限制:
我怀疑SSL类型设置有点过于复杂,因为似乎大多数开发人员并不真正知道如何正确实现它。
使用oAuth 1.0,it seems fairly simple:
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"
但开发人员似乎现在专注于oAuth 2,其中一个可能的解决方案是:
How does 2-legged oauth work in OAuth 2.0?
首先要求你调用“/ oauth / token”来获取一个令牌,但似乎没有太多关于这实际如何工作的规范形式(见回复):
http://www.ietf.org/mail-archive/web/oauth/current/msg07957.html
然而,有一些提及在oAuth 2中使用MAC,这可能是有用的...例如,授权一次获取MAC(没有登录详细信息),保持半无限期,并重新使用对于所有后续请求:
http://blog.facilelogin.com/2013/01/oauth-20-bearer-token-profile-vs-mac.html
还有一个关于HMAC的有趣讨论,其中暗示没有关于其如何运作的标准:
http://flascelles.wordpress.com/2010/01/04/standardize-hmac-oauth-restful-authentication-schemes/
其他说明:
oAuth 1.0的实施,文档和讨论:
http://www.ietf.org/mail-archive/web/oauth/current/msg06218.html https://developers.google.com/accounts/docs/OAuth#GoogleAppsOAuth http://oauth.googlecode.com/svn/spec/ext/consumer_request/1.0/drafts/2/spec.html
不幸的是,我对oAuth 2.0的了解越多,我就越同意Eran Hammer:
现在提供的是授权蓝图 协议,“这是企业的方式”,提供“全新的 前沿销售咨询服务和集成解决方案“。 http://en.wikipedia.org/wiki/OAuth
答案 0 :(得分:9)
假设我们必须针对最低共同点进行编码,并使用您的需求列表(所有4个项目)作为我的设计种子,我会说以下内容:
?sig=<a mess of chars>&args=<more stuff>&nonce=f81d4fae-7dec-11d0-a765-00a0c91e6bf6
- 服务器将记录f81d4fae-7dec-11d0-a765-00a0c91e6bf6
处理后再也不允许再次使用它。您可以在合理的时间(月份?取决于速度/使用/等)后安全地从DB中过期。提示:这是使用Redis SET和SISMEMBER command的完美用例。您知道,当您不需要HTTPS进行所有通信时,使安全API设计立即痛苦的事情就会发生。一旦你这样做,你必须转向HMAC的/签名请求和nonce的解决方案。如果您与服务器的通信是通过HTTPS保护的,并且两者可以相互信任,那么生活会变得更好,您可以执行简单的基本身份验证之类的操作,并且只需向服务器提供API_KEY即可确定每个请求以确定谁(或什么)正在进行请求。
希望有所帮助!看来你已经对此进行了相当多的调查,所以如果你已经知道这一切并且没有帮助,我很抱歉。