现在很多网站都可以用第三方的账号登陆,比如,现在我要登录淘宝
买东西,而如果我没有淘宝的账号,我也可以用微博
的账号登录,这个微博账号就是第三方账号了。这个三方登录的实现主要包含OpenID和OAuth技术。
- OpenID强调
验证 authentication,
验证就是说“我”是不是
(微博用户) - OAuth强调
授权 authorization
。,授权是说“淘宝”可不可以用我的微博账号
,而可不可以
的前提则是“我”是不是
。
过程大概是这样(通俗版)
- 用户点开微博登录的链接,淘宝就跳到微博登录页面,验证微博用户,验证通过就可以用微博账号密码登录淘宝。
- 通过了微博的验证后微博就告诉淘宝,没错确实有么这个家伙。(上面这些都是OpenID的责任,OpenID也只做这件事,就是前面说的
是不是
) - 然后淘宝让用户通过。
- 这时淘宝只知道微博有该用户存在,但是并不知道用户在微博家里叫什么名,做过什么事,其实淘宝也不应该知道。
- 所以,淘宝通常就会做一件事,什么事呢?这时就轮到OAuth出场了,淘宝在把我交给微博验明正身的时候其实还“忽悠“了用户,明明只是验个身份,却问要不要把在微博家叫什么名做过什么事也告诉它(就是通常看到的几个打勾选项:
允许访问我的昵称
/允许访问我的头像
等等),淘宝说这样就可以为用户提供更多的服务,什么服务呢?模凌两可,用户看到有更多服务也没多想就打勾了,不要白不要是吧。
这里就用到了OAuth,就是前面说的可不可以
,这个要是真发现我在微博家干过的事,会不会把我加入重点监控对象,那就要看淘宝有多少节操了
其实现在很多的第三方登录都是这样,验证身份的同时顺便把你在其他地方的资料拿到手,名曰资料共享,其实共享一些非敏感信息倒也无妨,还可以免去了每去一个新网站都要填写一大堆重复资料的问题。但是我要吐槽的是,很多网站明明让我用第三方账号登录,你都OAuth了为毛登录后还要再填一遍邮箱昵称之类的东西?早知道这样我还不如直接在你这边注册就好了,在我看来这是用户体验的问题了。
OAuth
允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。
每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
OAuth是OpenID的一个补充(前面淘宝示例,OpenID验证,OAuth授权)
认证授权过程:
在认证和授权的过程中涉及的三方包括:
- 服务提供方,用户使用服务提供方来存储受保护的资源,如照片,视频,联系人列表。
- 用户,存放在服务提供方的受保护的资源的拥有者。
- 客户端,要访问服务提供方资源的第三方应用,通常是网站,如提供照片打印服务的网站。在认证过程之前,客户端要向服务提供者申请客户端标识。
使用OAuth进行认证和授权的过程如下所示:
- 用户想操作存放在服务提供方的资源。用户登录客户端向服务提供方请求一个临时令牌。
- 服务提供方验证客户端的身份后,授予一个临时令牌。
- 客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。
在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
- 用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
- 授权成功后,服务提供方引导用户返回客户端的网页。
- 客户端根据临时令牌从服务提供方那里获取访问令牌。
- 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
- 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。
OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。
OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
2012年10月,OAuth 2.0协议正式发布为RFC 6749 。
OpenID
OpenID 是一个以用户为中心的数字身份识别框架,它具有开放、分散性。OpenID 的创建基于这样一个概念:
可以通过 URI (又叫 URL 或网站地址)来认证一个网站的唯一身份,同理,我们也可以通过这种方式来作为用户的身份认证。
OpenID是一个去中心化的网上身份认证系统。对于支持OpenID的网站,用户不需要记住像用户名和密码这样的传统验证标记。取而代之的是,他们只需要预先在一个作为OpenID身份提供者(identity provider, IdP)的网站上注册。OpenID是去中心化的,任何网站都可以使用OpenID来作为用户登录的一种方式,任何网站也都可以作为OpenID身份提供者。OpenID既解决了问题而又不需要依赖于中心性的网站来确认数字身份。
OpenID正在被越来越多的大网站采用,比如作为身份提供者的AOL和Orange。OpenID可以和.NET Framework的Windows CardSpace一起使用。
由于URI 是整个网络世界的核心,它为基于URI的用户身份认证提供了广泛的、坚实的基础。
OpenID 系统的第一部分是身份验证,即如何通过 URI 来认证用户身份。目前的网站都是依靠用户名和密码来登录认证,这就意味着大家在每个网站都需要注册用户名和密码,即便你使用的是同样的密码。如果使用 OpenID ,你的网站地址(URI)就是你的用户名,而你的密码安全的存储在一个 OpenID 服务网站上(你可以自己建立一个 OpenID 服务网站,也可以选择一个可信任的 OpenID 服务网站来完成注册)。
与OpenID同属性的身份识别服务商还有ⅥeID,ClaimID,CardSpace,Rapleaf,Trufina ID Card等,其中ⅥeID通用账户的应用最为广泛。