参考的是:慕课网:http://www.imooc.com/video/10616
场景:用户用QQ登录慕课网
如果有不对的地方,欢迎批评指正,以便我们理解的更加透彻
首先简单说一下,oauth2通过第三方授权,可以安全的访问应用服务器。
此安全不是不要密码,不是不要密码,不是不要密码,重要的事情说三遍!而是输入账户密码后,应用服务器获取不到账户密码,只能获取授权服务器提供的部分的信息
最简单的例子就是阮老师的博客http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html中的例子:
有个云冲印的网站可以冲印用户保存在谷歌里面相片,用户虽然输入账户密码,但是云冲印网站获取不到账户密码,只能获取访问指定相片的权限
支线略过,下面补充场景,以便更好的了解oauth2的运行流程,他到底怎么获取不了权限???
本例中以下角色请自觉对应:
QQ:授权服务器
慕课网:应用服务器
1.慕课网发送未授权地址,在此之前慕课网已经满足了要求,QQ会给慕课网唯一的id和secret。
未授权地址里面包含id和返回的uri。同时,未授权地址里面自然要求用户填写qq的账户和密码,提交给的是第三方授权服务器,也就是qq。
这就是为什么应用服务器实际上是获取不到用户信息的原因
2.第三方授权服务器在接受了由资源服务器发送过来的用户的账户密码之后,会根据1里面的返回uri拼接一个code授权码。这个授权码只能使用一次,应用服务器将使用这个授权码从授权服务器那里获取授权服务器提供的部分用户信息。
白话就是:qq会返回慕课网一个授权码拼接在慕课网之前提交的uri后面。这个授权码只能用一次,当慕课网拿到授权码执行完3的操作后(看后面),授权码就失效了。
3.第三步,应用服务器拿到了授权服务器颁发的授权码,这个时候并不能获取用户信息,因为如果黑客也拿到了授权码,那是不行的。这一步自后应用服务器将获得授权服务器提供的部分用户信息,但是在此之前应用服务器需要提供自己的id,secret以及刚刚得到的授权码,只有当这三个都同时满足了,授权服务器才会正式的传输一个包含特定用户的令牌给应用服务器,并且还会发送一个更新令牌,更新令牌在整个流程里面用不到,最后讲
白话:慕课网得到了QQ发的授权码之后,就通过图片中的链接把自己的id,secret,以及授权码发给qq,qq通过校验授权码中的信息,判断慕课网的安全性,并还可以通过授权码中的信息,发送可以获取指定用户部分权限的许可证给慕课网
这就是为什么授权服务器可以获取用户的部分信息
4.第四步,应用服务器可以通过令牌可以获取用户的部分信息,比如头像和网名之类的。图片的意思只是一个举例,意思就是这个令牌token类似一个加了密的查询,本身没有信息,但是可以给授权服务器来调用授权服务器接口获取用户信息
白话:慕课网得到了获取用户权限的许可证之后,发给qq,qq就将部分信息发给慕课网
5.第五步,这个在原视频是第四步,意思是令牌的另外一个作用是,用户可以通过授权服务器的令牌,在应用服务器进行授权服务器中的操作
也就是说,原本用户的许可证是慕课网拿来通过qq获取用户信息的,许可证还可以被用户拿来用,通过慕课网在qq的地盘进行操作。当然这个操作肯定也是慕课网提交给QQ,qq再做的。慕课网本身干不了
6.关于令牌的更新
一般来说,令牌是有期限的。用户可能授权了之后过了段时间就需要重新授权了。当然,如果授权服务器的更新时间不能改变,而特定场景又需要应用服务器去一直有有效许可证的话,就会用到令牌的更新。
说白了就是qq给的许可证过期了,但是慕课网又省的用户重新授权,这个时候,之前提到的更新令牌就可以用了,慕课网这个时候拿一个更新令牌给qq,qq就又会发一个令牌以及更新令牌给慕课网。如果又过期了,就接着给令牌和更新令牌。
本文是在网上看了别人分享的视频有感,算是自己的理解。有不对的地方请多多指教,相互学习