OAuth受权登陆

1、写在前面

平常生活中,咱们常常看到到一个网站时,须要登陆的时候,都提供了第三方的登陆,也就是说你可使用你的微信,QQ,微博等帐号进行受权登陆。那么这个认证登陆的东西究竟是什么呢?数据库

技术文章--《也说OAuth受权登陆》

微信受权登陆页面安全

或者说你实现这样的受权登陆,该怎么作呢?我以为思路: 首先是登陆的网站时,去在第三方登陆后,第三方回调登陆网站的接口,而后网站这边拿到第三方的已经登陆状态,就能够在网站自己登陆了。就至关于微博微信就是你的登陆用户名和密码的校验。服务器

2、OAuth受权登陆

解决上面的问题,就能用到OAUTH协议。微信

1)【是什么】:app


OAUTH协议为用户资源的受权提供了一个安全的、开放而又简易的标准。与以往的受权方式不一样之处是OAUTH的受权不会使第三方触及到用户的账号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就能够申请得到该用户资源的受权,所以OAUTH是安全的。oAuth是Open Authorization的简写。如今OAuth已经到2.0版本了。二者不兼容。OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即彻底废止了OAuth1.0。如今SNS网站对两个协议的支持状况以下:网站

技术文章--《也说OAuth受权登陆》

各网站对OAuth版本支持状况ui

2)【使用场景】3d


== 若是一个用户须要两项服务:一项服务是图片在线存储服务A,另外一个是图片在线打印服务B。blog

因为服务A与服务B是由两家不一样的服务提供商提供的,因此用户在这两家服务提供商的网站上各自注册了两个用户,假设这两个用户名各不相同,密码也各不相同。当用户要使用服务B打印存储在服务A上的图片时,用户该如何处理?法一:用户可能先将待打印的图片从服务A上下载下来并上传到服务B上打印,这种方式安全但处理比较繁琐,效率低下;法二:用户将在服务A上注册的用户名与密码提供给服务B,服务B使用用户的账号再去服务A处下载待打印的图片,这种方式效率是提升了,可是安全性大大下降了,服务B可使用用户的用户名与密码去服务A上查看甚至篡改用户的资源。token

==用OAUTH实现背景一节中的典型案例:当服务B(打印服务)要访问用户的服务A(图片服务)时,经过OAUTH机制,服务B向服务A请求未经用户受权的Request Token后,服务A将引导用户在服务A的网站上登陆,并询问用户是否将图片服务受权给服务B。用户赞成后,服务B就能够访问用户在服务A上的图片服务。整个过程服务B没有触及到用户在服务A的账号信息。

3)【认证步骤】


==【OAuth 1.0a】

OAuth1认证基本步骤:

获取未受权的Request Token(temporary credentials)

请求用户受权Request Token

使用受权后的Request Token换取Access Token(token credentials)

使用 Access Token 访问或修改受保护资源

技术文章--《也说OAuth受权登陆》

OAuth1.0流程

==【OAuth 2.0 】

   OAuth2.0和OAuth1.0的区别仍是在于简化了认证过程,不须要从未受权的Request Token转化到受权Request Token,而是利用app key经过用户受权生成access token可是,与1.0的不一样之处是access token有自身的有效期,且不一样平台、不一样级别的程序有着不一样的有效期,在程序开发中必定记得判断access token是否过时,对于过时以后的处理方法主要是利用access token和refresh token从新生成access token或者从新利用app key向服务器发送请求生成access token。因为这个问题,与OAuth1.0基本一致不同,各个平台OAuth2.0作了不同的选择。

  OAuth2.0服务支持如下获取Access Token的方式:

  a. Authorization Code:Web Server Flow,适用于全部有Server端配合的应用。

  b. Implicit Grant:User-Agent Flow,适用于全部无Server端配合的应用。

  由于demo是无服务器的程式,因此咱们采用Implicit Grant:User-Agent Flow的获取方式。

技术文章--《也说OAuth受权登陆》

OAuth2.0步骤

4)【国内主要OAuth受权平台】


==【概述】 国内主要有3种受权登陆形式,分别是微信、QQ和新浪微博。3种平台受权登陆的流程大同小异,都是须要在其对应的开放网站上注册应用且产生appid及appsecert(或相似的其它叫法),并利用上述参数按照ahth2方式受权登陆。受权登陆成功后获取到你的应用相对于受权平台的惟一标识(微信、QQ叫openid,新浪微博叫uid)。

技术文章--《也说OAuth受权登陆》

受权流程图

==【微信】:目前,微信的第三方受权登陆是由微信开放平台来承载的。根据其最新的文档,用户经过微信受权登陆同时用户受权了获取userinfo时,则受权成功后会出现unionid字段,即微信开放平台会同时返回用户的openid和unionid(移动应用微信登陆开发指南)。开发者只须要将openid和unionid都保存到数据库便可。

==【QQ】:QQ受权登陆平台要想保存unionid可能要稍微麻烦一点。须要联系QQ客服申请获取unionid的全限。详见常见问题 - 文档资料--QQ互联的问题1。按照其要求发送邮件申请unionid的访问权限便可。正常状况下QQ客服会很快开通权限并回复开发者的申请邮件,并在邮件中比较详细的说明调用接口获取unionid的方式。

技术文章--《也说OAuth受权登陆》

微博的受权页面

==【 新浪微博】:新浪比较好,新浪微博的移动App和网页版的惟一标识都是统一的uid,无需作额外的操做。

3、写在最后

OAuth协议颇有用处,有机会仍是本身使用下,这样才能加深理解和记忆。

相关文章
相关标签/搜索