Oauth的O即Open,Oauth代表开放授权
做过微信公众平台开发的应该知道,在微信中网页授权中有如下流程:
Setp1 将用户引导到微信的授权页面
Setp2 用户点击同意授权,那么微信服务器会重定向到您设置的回调地址,并附带code
Setp3 您通过code,向微信服务器后端发起http请求,去获取access_token
Setp4 您通过access_token去调用微信提供的相关接口
Oauth 2.0中的关键角色:
资源拥有者
第三方软件
授权服务器
受保护的资源
我们再来梳理下角色和流程,首先,我们作为开发者(第三方软件),小明是我平台的新用户,我现在的需求是获取小明的基本资料(受保护的资源)来注册到我平台的会员,那么现在小明的资料在微信服务器内部,我们作为开发者根本读取不到,但微信为我们提供了一个入口,即只要经过用户(资源拥有者)同意,我们就能拿到资源拥有者的相关数据。
既然需要用户同意,那么我们首先就把小明重定向到微信提供的授权页面,让小明点击同意授权,然后微信授权服务通过浏览器向我们指定的redirect_url返回给我们一个code,即授权码,我们拿到code,再调用接口去获取access_token一个访问令牌,通过访问令牌(access_token)再去调用获取基本资料的接口。
为什么微信授权服务不直接把access_token返回给我们,而要通过授权码间接获取?因为access_token是非常机密的信息,不能通过浏览器暴露。如果将access_token像code一样返回我们,会造成安全问题(数据被劫持等),我们主动去获取access_token比被动返回access_token安全性高得多。而code能允许被浏览器传递是因为code有很短的有效期,即使你在有效期内获取了code,但你获取access_token还需要开发者的appid等相关机密数据。因此有较高的安全性。
(本节完)