Open Id and Open Auth
1.authentication(身份验证) and authorization(授权)
Open Id
OpenID is a decentralized authentication protocol that makes it easy for people to sign up and access web accounts.
OpenId是一个登录协议
Oauth
An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.
Oauth是一个授权协议
似乎他们是不同领域的两种协议。
仔细想想下面的几个问题,就可以就知道他们的本质了。
a.登录了以后做什么?
b.不登录如何授权?
2.各个应用分析
登录Google Facebook都提供OpenId和Oauth服务,可以使用他们的帐号登录其他允许的网站。
Linkedin 提供Oauth服务, 可以使用他的帐号登录其他允许的网站。
人人网也提供Oauth服务。雅虎、淘宝、QQ等都提供类似的Oauth服务。
OpenId | 依赖方(Relying Party, RP) | 身份提供者(Identity Provider, IdP) |
Oauth | Consumer | 服务提供商 |
有了这两种技术促进了各网站间融合。
典型应用:
一般依赖方(Consumer)都是影响力小一些的网站,提供商都是大网站。大网站希望小网站来丰富他的功能,小网站希望大网站给他带来用户等资源。
大网站(服务提供商)可以根据商业策略对小网站的相关功能做一些限制,有的限制大,有的限制小。
像淘宝和QQ这样的强势中国网站,对使用Oauth的数据有很多限制和审核流程。
美国的大网站要开放的多。无论怎样还是为背后的商业目的说驱动。
3.技术分析
OpenId
http://openid.net/get-an-openid/what-is-openid/
http://openid.net/get-an-openid/start-using-your-openid/
http://www.iteye.com/news/4003
流程:
1. 获取用户提供的标识符:RP 获得用户的 OpenID。
2. 发现:RP 规范化用户提供的标识符,以决定联系哪个 OP 进行身份验证,如何与其联系。
3. 关联:RP 和 OP 建立一个安全通信渠道。
4. 身份验证请求:RP 要求 OP 对用户进行身份验证。
5. 验证:RP 向 OP 请求用户名验证,并确保通信没有受到干扰。
6. 转到应用程序:身份验证之后,RP 为用户指向其先前请求的资源。
Oauth
http://oauth.net/
http://developers.facebook.com/docs/authentication/
API Key:ggZ1
Secret Key:iImb
1. 用户访问RP ,
2. RP 要求 OP 对用户进行身份验证
3. 跳回RP,RP得到Access_token
基本流程就是如我以上所说的。Oauth需要在服务提供商网站上申请开发者帐号。
4.整合项目角度分析
openid要标准一些,实现了依赖方网站以后,各个服务提供商的openId帐号都可以登录。
Oauth各个网站虽然基本功能差不多,各个提供商都需要申请帐号,独立整合,而且提供的数据还不一样。
所以需要按照产品的设计一个一个的整合和维护,将会比较费时费力。
5.实现的类库
我试过下面类库,都非常简单。
OpenId:
http://code.google.com/p/joid/
Oauth:
使用服务提供商给的Javascript类库或REST类库