【发布时间】:2013-01-02 09:36:32
【问题描述】:
如果我要实现一个新的服务器到服务器 API,有哪些身份验证标准可以让其他人轻松使用它?
理想情况下,我需要记录的身份验证工作原理越少越好(因此是标准),并且使用该服务的开发人员更有可能使用标准库。
但有一些限制:
- 我不能保证 API 将在 HTTPS 上可用,因为它可能位于托管多个网站(具有 1 个 IP 地址)的盒子上。
- 它应该阻止重放攻击...因此,如果请求被网络上的另一个节点捕获,则无法将相同的请求重新发送到 API。
- 理想情况下,您应该只发送请求并返回响应...因此无需先联系 API 来获取一次性密钥(nonce)
- 请求可能应该由发送者完整签名,以避免中间人类型的攻击。
我怀疑 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
【问题讨论】:
-
UCC/SAN 证书允许多个主机在一个 IP 上。
-
@iain 你是对的,但在我的情况下,它通常是一个托管来自不同客户(网站所有者)的域的服务器,他们不想一起购买一个证书。还有 SNI(服务器名称指示),但以 IE7 或 IE8(未经过真正测试)、Firefox 2、Opera 8、Chrome 6、Safari 2.1、iOS 4.0、Android 3 和 Windows Phone 7 开头......所以得到在那里。