Oauth2.0

概念

一、快递员问题

我住在一个大型的居民小区。
小区有门禁系统。
进入的时候需要输入密码。
我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。
如果我把自己的密码,告诉快递员,他就拥有了与我同样的权限,这样好像不太合适。万一我想取消他进入小区的权力,也很麻烦,我自己的密码也得跟着改了,还得通知其他的快递员。
有没有一种办法,让快递员能够自由进入小区,又不必知道小区居民的密码,而且他的唯一权限就是送货,其他需要密码的场合,他都没有权限?

二、授权机制的设计

于是,我设计了一套授权机制。

  1. 第一步,门禁系统的密码输入器下面,增加一个按钮,叫做”获取授权”。快递员需要首先按这个按钮,去申请授权。
  2. 第二步,他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。
  3. 第三步,门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。
  4. 第四步,快递员向门禁系统输入令牌,进入小区。
    有人可能会问,为什么不是远程为快递员开门,而要为他单独生成一个令牌?这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。

三、互联网场景

我们把上面的例子搬到互联网,就是 OAuth 的设计了。

  1. 首先,居民小区就是储存用户数据的网络服务。比如,微信储存了我的好友信息,获取这些信息,就必须经过微信的”门禁系统”。
  2. 其次,快递员(或者说快递公司)就是第三方应用,想要穿过门禁系统,进入小区。
  3. 最后,我就是用户本人,同意授权第三方应用进入小区,获取我的数据。

简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

HTTP 302

302 Found,原始描述短语为 Moved Temporarily ,是HTTP协议中的一个状态码(Status Code)。可以简单的理解为该资源原本确实存在,但已经被临时改变了位置;
换而言之,就是请求的资源暂时驻留在不同的URI下,故而除非特别指定了缓存头部指示,该状态码不可缓存。
对于服务器,通常会给浏览器发送HTTP Location头部来重定向到新的新位置

https://www.cnblogs.com/flashsun/p/7424071.html

http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

http://www.ruanyifeng.com/blog/2019/04/github-oauth.html

http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

https://u.baidu.com/oauth/page/index?platformId=4960345965958561794&appId=125030eb02514e5f1696390302066f3e&scope=65,66,67,68,69,70,71,72,1001788,1001455,73,1002161,74,75,1001789,1001790,1001791,1002829,1004606&state=ww90b1ab33636e7da5&callback=https://demo.weiling.cn/marketing/oauth

百度Ouath 测试环境授权链接

https://u.baidu.com/oauth/page/index?platformId=4960345965958561794&appId=125030eb02514e5f1696390302066f3e&scope=65,66,67,68,69,70,71,72,1001788,1001455,73,1002161,74,75,1001789,1001790,1001791,1002829,1004606&state=wpK9-UBwAA_FpZOPXmb_I1sI-yVd4YmQ&callback=https://demo.weiling.cn/marketing/oauth