先说区别
区别
OpenID 和 OAuth 都可以用来认证身份,但是他们之间到底有哪些不同?
OpenID — authentication 证明、鉴定、证实 ——“用户是谁”
OAuth — authorization 授权、认可、批准——“用户能做什么”
OpenID
- 用户希望访问其在http://example.com的账户
- http://example.com (Relying Party) 提示用户输入他/她/它的OpenID
- 用户给出了他的OpenID,比如说”http://user.myopenid.com”
- http://example.com 跳转到了用户的OpenID提供商“mypopenid.com”
- 用户在”myopenid.com”(OpenID provider)提示的界面上输入用户名密码登录
- “myopenid.com” (OpenID provider) 问用户是否要登录到http://example.com
- 用户同意后,”myopenid.com” (OpenID provider) 跳转回http://example.com
- http://example.com 允许用户访问其帐号
OAuth
- 用户在使用http://example.com时希望从http://mycontacts.com导入他的联系人
- http://example.com (Consumer)把用户送往http://mycontacts.com (Service Provider)
- 用户在http://mycontacts.com 登录(可能也可能不用了他的OpenID)
- http://mycontacts.com问用户是不是希望授权http://example.com访问他在http://mycontact.com的联系人
- 用户确定
- http://mycontacts.com 把用户送回http://example.com
- http://example.com 从http://mycontacts.com拿到联系人
- http://example.com 告诉用户导入成功
OpenID是用来验证的,就是说可以用一个url来唯一表明身份(不用挨个记每个网站的用户密码)。
OAuth是用来授权的(可以授权一个网站访问在另外一个网站的数据,而不用把密码给第一个网站)。
很多人现在错误的把OAuth当做OpenID使用。但是其实也不会照成什么影响。
OpenID
问题:
大部分网站都是通过用户名与密码来登录认证用户身份,那么,我们每使用一个网站都得注册一个账号,很麻烦。
能不能注册一个账号,然后就可以访问其他网站呢?
OpenID登场了。
你首先在一个提供 OpenID的网站上注册一个OpenID,然后你可以使用这个 OpenID去登录支持 OpenID的网站。也就是,使用账号和密码注册一次,就可以登录很多其他的网站。
OpenID简介:
OpenID是一个以用户为中心的数字身份识别框架,它具有开放、分散、自由等特性。
OpenId的创建是基于的概念:
我们可以通过URI(或者URL网址)来识别一个网站。同样,我们也可以通过这样的方式来识别一个用户的身份。
OpenId系统的身份认证就是通过URI来认证用户身份。
登录一个支持 OpenID 的网站非常简单(即便你是第一次访问这个网站也是一样)。
只需要输入你注册好的 OpenID 用户名,然后你登录的网站会跳转到你的 OpenID 服务网站,在你的 OpenID 服务网站输入密码(或者其它需要填写的信息)验证通过后,你会回到登录的网站并且已经成功登录。 OpenID 系统可以应用于所有需要身份验证的地方,既可以应用于单点登录系统,也可以用于共享敏感数据时的身份认证。
除了一处注册到处通行以外,OpenID 给所有支持 OpenID 的网站带来了价值--共享用户资源。用户可以清楚的控制哪些信息可以被共享,例如姓名、地址、电话号码等。今天,OpenID 作为以用户为中心的身份验证系统已经为数百万的用户提供了服务。
二、OpenID相关术语
- End User:终端用户,使用OP与RP的服务
- Relying Party依赖方:简称RP,服务提供者,需要OP鉴权终端用户的身份
- OpenID Provider:OpenID提供者,简称OP,对用户身份鉴权
- Identifier标识符:标识符可以是一个HTTP、HTTPS或者XRI(可扩展的资源标识)
- User-Agent:实现了HTTP1.1协议的用户浏览器
- OP Endpoint URL:OP鉴权的URL,提供给RP使用
- OP Identifier:OP提供给终端用户的一个URI或者XRI,RP根据OP Identifier来解析出OP Endpoint URL与OP Version
- User-Supplied Identifier:终端用户使用的ID,可能是OP提供的OpenID,也可以是在RP注册的ID。RP可以根据User-Supplied Identifier来解析出OP Endpoint URL、OP Version与OP_Local Identifer
- Claimed Identifier:终端用户声明自己身份的一个标志,可以是一个URI或者XRI
- OP-Local Identifier:OP提供的局部ID
三、OpenID验证流程
- 终端用户请求登录RP网站,用户选择了以OpenID方式来登录
- RP将OpenId的登录界面返回给终端用户
- 终端用户以OpenID登陆RP网站
- RP网站对用户的OpenID进行标准化,此过程非常负责。由于OpenID可能是URI,也可能是XRI,所以标准化方式各不相同。具体标准化过程是:如果OpenID以xri://、xri://$ip或者xri://$dns开头,先去掉这些符号;然后对如下的字符串进行判断,如果第一个字符是=、@、+、$、!,则视为标准的XRI,否则视为HTTP URL(若没有http,为其增加http://)。
- RP发现OP,如果OpenId是XRI,就采用XRI解析,如果是URL,则用Yadis协议解析,若Yadis解析失败,则用Http发现。
- RP跟OP建立一个关联。两者之间可以建立一个安全通道,用于传输信息并降低交互次数。
- OP处理RP的关联请求
- RP请求OP对用户身份进行鉴权
- OP对用户鉴权,请求用户进行登录认证
- 用户登录OP
- OP将鉴权结果返回给RP
- RP对OP的结果进行分析
OAuth
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
OAUTH认证授权具有以下特点:
- 简单:不管是OAUTH服务提供者还是应用开发者,都很容易于理解与使用。
- 安全:没有涉及到用户密钥等信息,更安全更灵活;
- 开放:任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务;
在认证和授权的过程中涉及的三方包括:
- 服务提供方(Service Provider),用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。
- 用户(User),存放在服务提供方的受保护的资源的拥有者。
- 客户端(Consumer),要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。
使用OAuth进行认证和授权的过程如下所示:
- A. 使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求,请求需要带上的参数见上图。
- B. OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。
- C. 使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。
- D. OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。
- E. Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。
- F. OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。
- G. 使用者以后就可以使用上步返回的Access Token访问用户授权的资源。
OAUTH相关的三个URL:
- Request Token URL: 获取未授权的Request Token服务地址;
- User Authorization URL: 获取用户授权的Request Token服务地址;
- Access Token URL: 用授权的Request Token换取Access Token的服务地址;
OAUTH相关的参数定义:
- oauth_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的oauth_consumer_key。
- oauth_consumer_secret:oauth_consumer_key对应的密钥。
- oauth_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
- oauth_signature: 用上面的签名方法对请求的签名。
- oauth_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
- oauth_nonce: 随机生成的字符串,用于防止请求的重放,防止外界的非法攻击。
- oauth_version: OAUTH的版本号,可选,其值必须为1.0。
source:
https://www.biaodianfu.com/learn-oauth.html
https://www.biaodianfu.com/learn-openid.html
https://www.biaodianfu.com/oauth-openid.html