OAuth 2.0中文译本
(一)背景知识
OAuth 2.0很可能是下一代的“用户验证和授权”标准,目前在国内还没有很靠谱的技术资料。为了弘扬“开放精神”,让业内的人更容易理解“开放平台”相关技术,进而长远地促进国内开放平台领域的发展,笔者特意将OAuth 2.0协议翻译成中文。
目前OAuth 2.0还没有最后定稿,最新的修改版是第11个版本,本文下面的翻译即基于这个第11版本。原文见/html/draft-ietf-oauth-v2-11
关于OAuth 2.0的更多背景知识,请参考我的另一篇文章:itgeeker/mathml/readpaper?pid=65
(二)术语中英对照表
profile中文由于OAuth协议版本较多(1.0,1.0a,2.0等),并且各个版本中的技术术语也各不相同,关于英文技术术语与中文的对应关系,我们以OAuth 2.0的第11版本中的描述为准。
另外有一些情况,一些英文术语不容易到普遍接受的汉语释义,翻译过来反而可能引起误解,而英文术语本身可能更容易理解,因此就不考虑对这部分词汇做翻译了。比如,“web service”、“endpoint”、“user-agent”、“URI”、“cookie”等,你只需要知道它是什么就好了。
还有一些特别难于翻译的词汇,比如“profile”,这个词用在协议里,大概表示:协议功能的某个剖面、子集、子视图或轮廓。如果翻译成“视图”,容易让人想到“view”这个词,产生冲突,最后,我在这里创造了一个新词汇:“子态”。
下面是整理出来的重要技术术语的中英对照表:
云计算 —— cloud computing
第三方 —— third-party
应用/程序 —— application
私有证书 —— credential
身份验证 —— authentication
授权 —— authorization
明文 —— clear-text
客户端 —— client {译者注:本文中的客户端与平常所说的“客户端”并不相同,是相对资源服务器和授权服务器来说的,它可能指第三方应用的服务器程序或客户端程序}
服务器 —— server
资源拥有者 —— resource owner
受保护资源 —— protected resource
资源服务器 —— resource server
访问令牌 —— access token
授权服务器 —— authorization server
访问许可 —— access grant
实体 —— entity
签名 —— signature
刷新令牌 —— refresh token
作用域 —— scope
授权码 —— authorization code
标识符 —— identifier
密钥 —— secret
断言 —— assertion
原生程序 —— native application
子态 —— profile
同源策略 —— same-origin policy
回调 —— callback
自治的 —— autonomous
查询参数部分 —— query component
分段参数部分 —— fragment component
媒体类型 —— media type
厂商特性的 —— vendor-specific
增强型巴科斯范式 —— ABNF
互联网编号分配机构 —— IANA
互联网工程指导组 —— IESG
标准轨道 —— standards-track
(三)中文译本
1. 引言
随着分布式web service和云计算的使用越来越多,第三方应用需要能访问到一些服务器托管资源。这些资源通常都是受保护的,并且要求使用资源拥有者的私有证书(典型的证书是用户名和密码)进行身份验证。
在传统的基于客户端-服务器的身份验证模型中,客户端为了访问服务器的受保护资源,是使用资源拥有者的私有证书来做身份验证的。为了让第三方应用能够访问受保护资源,资源拥有者必需将他/她/它的私有证书透露给第三方。这引出了很多问题并存在很多局限性:
第三方应用需要用明文保存资源拥有者的私有证书(一般是密码),留作以后再次使用。
虽然密码验证会造成安全隐患,服务器仍然需要支持用密码做身份验证(对称的密码验证)。
第三方应用对资源拥有者的受保护资源获得过多的使用权限,而资源拥有者没有能力限制访问到某个资源子集,限制持续时间,或限制这些资源所能支持的访问方式。
资源拥有者无法在不影响所有第三方的前提下单独撤销某个第三方的访问权限,他/她/它只能通过修改密码来回收所有权限。
OAuth通过将客户端和资源拥有者的角进行分离来解决这些问题。在OAuth中,客户端(通常不是资源拥有者,而是代表资源拥有者来操作)提出请求来访问由资源拥有者控制并由资源服务器托管的资源,然后得到与资源拥有者不同的一套私有证书。
客户端并不是直接使用资源拥有者的私有证书来访问受保护资源,而是得到一个访问令牌——一个代表某一特定作用域、持续时间和其它属性的字符串{译者注:非常重要的一个概念,英文叫access token}。访问令牌由授权服务器在资源拥有者的授意下分发给第三方客户端。客户端使用访问令牌来访问由资源服务器托管的受保护资源。
例如,一个web用户(资源拥有者)能够准许一个打印服务(客户端)访问她存储在另一个照片共享服务(资源服务器)中的照片,而不用将她的用户名和密码透露给这个打印服务。她在一个被该照片分享服务信任的身份验证服务(授权服务器)上完成验证,而这个验证服务会将特定于委托服务的私有证书(令牌)分发给原打印服务。
基于资源服务器对安全的需求,访问令牌可以有不同的格式、结构和使用方式(例如密码学特性)。访问令牌的属性和用以访问受保护资源的方式不在本规范的规定范围之内,而是由相关的其它规范来定义。授权服务器和资源服务器之间的交互方式不在本规范的规定范围之内。
1.1. 符号规范
这篇文档中的关键词“必须”、“一定不能”、“要求”、“会”、“不会”、“应该”、“不应该”、“建议”、“可以”、“可选的”,遵从[RFC2119]中的解释。