Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

OAuth2.0与联合登陆

  网站联合登陆现在是越来越流行了,登陆接口的提供商也越来越多,以前乱七八糟的API也渐渐没法使用,OAuth2.0已经基本普及。前段时间阮一峰的博客上也写过OAuth2.0相关的文章,但感觉介绍得非常笼统。现在我们举“联合登陆”这个例子来说明OAuth2.0。
  首先,OAuth2.0的作用是把A网站的账号授权给B网站使用,也就是说用户在A网站注册了账号,在B网站上也可以使用A网站的账号登陆。比如QQ账号是QQ网站的,在京东商城上也可以使用QQ账号登陆,这样节省了用户的注册成本。而且A网站还会提供一系列API授权于B网站获取用户的其它信息,或对其在A网站上的账号做一些操作。
  并不是任何网站都可以使用A网站的账号登陆,这需要A网站的授权。也就是说,如果自己的网站想使用这种登陆方式,首先就要到提供商网站去申请接口。这个接口包含一个ID和KEY,具体叫做什么ID、什么KEY,在不同的网站上有不同的叫法。比如腾讯就称为APP ID和APP KEY。另外还有一些权限的授予,比如是否允许读取一些用户的私密信息等。这些东西可能需要很麻烦的审核,这得看提供商怎么做。比如申请腾讯的接口就得提供身份证或营业执照。
  得到了ID和KEY之后,就可以在自己的网站上部署操作了。ID通常用于前端,它是公开的。而KEY通常用于后端,它是保密的。OAuth2.0的工作流程基本可以分为三个步骤:
    1. 获取临时Token,证明当前用户是提供商的注册用户。
    2. 获取Access_Token,证明用户所在平台是提供商已授权的。
    3. 获取数据
  第一步的目的是证明当前用户是提供商的注册用户,通常的做法是从自己的网站打开接口URL的页面,这个页面会显示提供商的用户登陆表单。比如点击“使用QQ登陆”后会在腾讯的域名上打开一个QQ的登陆页面,在这个页面上操作完成后返回到一个指定的页面,并在请求参数中附带得到的临时Token,以便进入下一步验证。这个接口URL中最重要的参数有两个,一个是网站申请授权的ID,一个是操作完成后跳转的页面地址。
  第二步的目的是证明用户所在的平台是提供商已授权的,这需要用到KEY,需要从服务器发起请求。也就是证明之前提供的ID是自己网站所有的,这样别人就无法使用你申请到的ID了。这步的做法是从服务器向接口URL所描述的地址提交上一步得到的临时Token和网站申请授权的KEY。如果验证成功的话就可以得到Access_Token了。Access_Token是授权成功的标识符,之后获取数据的步骤需要用到。但Access_Token既不是唯一的、也不是永久的。它也是一个临时生成的东西,每次授权得到的Access_Token都不同,而且Access_Token还可能被提供商设置了时效性。所以它仅仅描述一个用户已授权而已,不该作为其它用途。
  第三步是最简单的,既然我们已经有了可以描述用户已授权的Access_Token向提供商服务器请求所需的数据时只要附带上这个参数即可。而具体有哪些数据可以请求,这就得看提供商有哪些API了。
  以上就是OAuth2.0的基本工作流程。而且有一点很重要,以上这些步骤得到的所有Token都是临时的,它们不能作为用户的唯一标识符使用。而网站联合登陆这个功能需要在自己的数据库中储存用户的唯一标识符,以便以后的验证。也就是说,OAuth2.0并没有规范“联合登陆”这个功能。具体要如何实现还得看提供商的做法,下面是两种基本做法:
    腾讯:得到Access_Token后,通过请求指定的URL可以得到用户的唯一标识符。
    新浪:第二步不仅可以得到Access_Token,还包含了用户的唯一标识符。
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^