TOC 
privateD. Recordon
 B. Fitzpatrick
 May 2006


OpenID 认证 1.1

Abstract

OpenID 认证提供了证明最终用户拥有其身份标识 URL 的方法。而不通过密码、邮件地址或者任何他们不想要的。

OpenID 是完全分散式的,也就是说任何人都可以选择成为消费者或者身份识别提供方而不需要去登记或者被一个中央当局批准。 最终用户可以选择他们喜欢的身份提供方并且可以任意地在不同的提供方之间移动切换。

在协议中也没有对 JavaScript 和现代浏览器的要求,认证方案允许用 AJAX 样式的设定,来使得最终用户不需要离开消费者页面。

OpenID 认证规范不提供任何机制来交换数据, 消费者可以从各种公开场获得最终用户的信息,比如下面的这些: (FOAF, RSS, Atom, vCARD, 等)。 扩展则提供了一个交换数据的机制。



Table of Contents

1.  符号
2.  术语
3.  概述
    3.1.  将 HTML 文档转换成标识
        3.1.1.  委派认证
    3.2.  提交声称的身份标识
    3.3.  消费者站点抓取身份标识
    3.4.  智能模式对沉默模式
    3.5.  消费者核实身份标识
4.  方式
    4.1.  associate
        4.1.1.  请求参数
        4.1.2.  返回参数
        4.1.3.  其他注意事项
    4.2.  checkid_immediate
        4.2.1.  请求参数
        4.2.2.  返回参数
        4.2.3.  特别注意
    4.3.  checkid_setup
        4.3.1.  请求参数
        4.3.2.  返回参数
        4.3.3.  特别注意
    4.4.  check_authentication
        4.4.1.  Request Parameters
        4.4.2.  返回参数
        4.4.3.  特别注意
5.  安全考虑
Appendix A.  默认值
Appendix A.1.  Diffie-Hellman P 值
Appendix B.  Error Responses
Appendix C.  键-值格式
Appendix D.  限制
Appendix E.  其它
6.  规范参考
§  Authors' Addresses




 TOC 

1.  符号

本文中所使用的关键词“必须”、“不能”、“必需的”、“应”、“不得”、“应该”、 “不应该”、“建议”、“可能”和“可选”由 [RFC2119] (Bradner, B., “Key words for use in RFCs to Indicate Requirement Levels,” .) 解释。



 TOC 

2.  术语

最终用户(End User):
想向消费者证明他们的身份的实际人类用户。
身份标识(Identifier):
身份标识只是一个 URL。OpenID 认证协议的整个流程就是证明一个最终用户拥有一个 URL。
声称的身份标识(Claimed Identifier):
最终用户声称自己拥有的 但尚未被消费者验证的身份标识。
已验证的身份标识(Verified Identifier):
最终用户已经向消费者 证明了自己拥有的身份标识。
消费者(Consumer):
想要证明最终用户拥有其声 称的身份标识的 Web 服务。
身份标识提供方(Identity Provider):
又称“IdP”或者“服务 器”。消费者为了证明最终用户拥有其声称的身份标识,所联系的 OpenID 认证服务器。
最终用户如何向身份标识提供方提供证据不在 OpenID 认证范畴。
用户代理(User-Agent):
最终用户的 Web 浏览器。特殊插件 或 JavaScript 支持不是必需的。



 TOC 

3.  概述



 TOC 

3.1.  将 HTML 文档转换成标识

为了让消费者知道身份标识的提供方,最终用户必须在他们的 URL 所指的 HTML 文 档的 HEAD 部分增加一些标记。HTML 文档和最终用户的身份标识提供方不一定需要是同 一台主机;身份标识 URL 和身份标识提供方可以是两个完全分开的服务。

要使用 http://example.com/ 作为最终用户的身份标识 http://openid.example.com 作为他们的身份标识提供方,将下面的标签加入到身份标识 URL 所指的 HTML 文档的 HEAD 部分。

<link rel="openid.server" href="http://openid.example.com/">



 TOC 

3.1.1.  委派认证

如果最终用户的主机不能运行一个身份标识服务器,或者最终用户希望使用一个不 同的主机,他们就需要委派认证。例如,他们想使用自己的站点 http://www.example.com/ 作为身份标识,并不是说要求他们自己运行一个身份标识服务器。

如果他们有一个 LiveJournal 帐号(比如“exampleuser”),并知道 LiveJournal 提供了一个 OpenID 的身份标识服务器,也就是说他们了拥有身份标识 http://exampleuser.livejournal.com/,那么就可以把他们的认证委派给 LiveJournal 的身份标识服务器。

所以,他们使用 www.exampoe.com 作为他们的身份标识,但消费者实际上是 通过 http://www.livejournal.com/openid/server.bml 这个身份标识服务器验证的 http://exampleuser.livejournal.com/,只需要将下面的标签加入到他们的身份标识 的 URL 所指的 HTML 文档的 HEAD 部分。

<link rel="openid.server" href="http://www.livejournal.com/openid/server.bml">

<link rel="openid.delegate" href="http://exampleuser.livejournal.com/">

现在,当消费者看到那个标签,它就会和 http://www.livejournal.com/openid/server.bml 联系询问最终用户是否是 exampleuser.livejournal.com。

这个功能主要的好处是让最终用户在服务商发生变化时可以保证他们的身份标识不发生变化; 他们只需要修改一下委派对象即可。



 TOC 

3.1.2.  注意



 TOC 

3.2.  提交声称的身份标识

继续这个例子,最终用户访问一个支持 OpenID 认证的消费者站点。消费者呈现一个表单让他们输入身份标识 URL。

例如:

	      ----------------------------------
	      |[徽标]example.com                | [登录按钮]
	      ----------------------------------


 TOC 

3.2.1.  注意



 TOC 

3.3.  消费者站点抓取身份标识

现在消费者站点需要去抓取用户声称的身份标识所指的文档。然后消费者解析其 HEAD 部分, 找到 “openid.server” 和可选的“openid.delegate” 定义。



 TOC 

3.3.1.  注意



 TOC 

3.4.  智能模式对沉默模式

OpenID 认证同时支持“智能模式”和“沉默模式”来容纳不同的消费者。 一个智能的消费者用保存状态信息的方式以便在开始阶段完成少许的工作。 一个“沉默模式”的消费者则是完全的无状态的,但是需要一个额外的 HTTP 请求。



 TOC 

3.4.1.  智能模式注意事项



 TOC 

3.5.  消费者核实身份标识

消费者现在可以构建 URL 给身份提供者checkid_immediate (checkid_immediate) (或 checkid_setup (checkid_setup))并发送用户代理给它。

由用户代理发回最终用户的 cookies 或者其他的一些登录凭证给身份标识提供者。 身份标识提供者完成它的工作后,添附它的回应到参数 openid.return_to 指定的 URL, 并引导用户代理返回到消费者。



 TOC 

4.  方式



 TOC 

4.1.  associate



 TOC 

4.1.1.  请求参数



 TOC 

4.1.2.  返回参数

返回格式: 键值对



 TOC 

4.1.3.  其他注意事项



 TOC 

4.2.  checkid_immediate



 TOC 

4.2.1.  请求参数



 TOC 

4.2.2.  返回参数

返回格式: 查询字符串参数



 TOC 

4.2.2.1.  总是发送的



 TOC 

4.2.2.2.  在断言失败时发送



 TOC 

4.2.2.3.  在断言肯定时发送



 TOC 

4.2.3.  特别注意



 TOC 

4.3.  checkid_setup



 TOC 

4.3.1.  请求参数



 TOC 

4.3.2.  返回参数

返回格式: 查询字符串参数



 TOC 

4.3.2.1.  总是发送



 TOC 

4.3.2.2.  在断言肯定时发送



 TOC 

4.3.3.  特别注意



 TOC 

4.4.  check_authentication



 TOC 

4.4.1.  Request Parameters



 TOC 

4.4.2.  返回参数

返回格式:键值对



 TOC 

4.4.3.  特别注意



 TOC 

5.  安全考虑



 TOC 

Appendix A.  默认值



 TOC 

Appendix A.1.  Diffie-Hellman P 值

1551728981814736974712322577637155\ 3991572480196691540447970779531405\ 7629378541917580651227423698188993\ 7278161526466314385615958256881888\ 8995127215884267541995034125870655\ 6549803580104870537681476726513255\ 7470407658574792912915723345106432\ 4509471500722962109419434978392598\ 4760375594985848253359305585439638443



 TOC 

Appendix B.  Error Responses

这个章节适用于协议/运行时错误,而不是认证错误。认证错误被定义在本协议中了。



 TOC 

Appendix C.  键-值格式

Lines of:



 TOC 

Appendix D.  限制



 TOC 

Appendix E.  其它



 TOC 

6. 规范参考

[RFC2119] Bradner, B., “Key words for use in RFCs to Indicate Requirement Levels.”
[RFC2396] Berners-Lee, T., “Uniform Resource Identifiers (URI): Generic Syntax.”
[RFC2631] Rescorla, E., “Diffie-Hellman Key Agreement Method.”


 TOC 

Authors' Addresses

  David Recordon
Email:  drecordon@verisign.com
  
  Brad Fitzpatrick
Email:  brad@danga.com