oauth原理解析

来源:互联网 发布:万网域名申请流程 编辑:程序博客网 时间:2024/06/07 03:34

1、用appkey换取code

访问https://目标网站.com/authorize?appkey=xxxxxx&redirect_uri=https://我们的网站(第三方).com/callback_url&response_type=code&state=STATE

检测发现用户没有登录的情况下,引导用户到授权页面去授权,这个地址是位于目标网站的一个网址,带入了我们的appkey,以及我们的回调地址redirect_uri。

2、用code换取token

用户授权完了以后,会跳到我们的刚才填的回调地址,也就是我们的网站,他是这样的https://我们的网站(第三方).com/callback_url?code=xxxx直接在url里把参数带过来。

我在页面里获取这个code就可以了,比如:

        if(null != $this->input->get('code'))        {            $code = $this->input->get('code');            $url = "https://目标网站.com/access_token?appkey=xxxxxx&secret=xxxxxx&code=".$code."&grant_type=authorization_code";            $this->load->library('CurlRequest');            $res = $this->curlrequest->https_request($url);            echo $res;        }else        {            exit("获取code失败!");        }

这里其实是我们在后台,访问了一个url,这个url里我们把appkey,secret,code都传进去,会返回来一个json,这个json里面有token的全部信息。这个操作其实是我们在后台进行的一个api访问,这个叫做curl操作。

返回的信息包括:

{"result":{"access_token":"72fe7c5a8f0466b870f66c53c9d6409600062487ef",//token "expire_in":90000,//过期时间 "refresh_token":"ffff",//刷新token "openid":"111111", "shop_name":"xxx", "scope":3, "shop_logo":"http://xx.jpg?w=250&h=250&cp=1"}, "status":{"status_code":0,"status_reason":"success"}}

3、使用token

这个access_token就是我们所需要的,每次通过api查询用户相关信息需要附带进去的一个key,expire_in是access_token的过期时间,refresh_token是用来刷新access_token的token。refresh_token一般有效期比较长,比如说有一个月。

一般是这样使用的:定期通过refresh_token刷新access_token,这样保证access_token在过期前得到刷新。这样access_token就可以一直使用到refresh_token过期前。

refresh_token过期了就没办法了,只能用户重新去授权。

一些关键的知识点:

<1>用户每次登录授权,如果access_token没有过期他是不会主动去更新的。

如果现在的access_token没有过期,那么再次登录授权,返回的access_token和refresh_token都没有改变。

如果现在的access_token已经过期,那么再次登录授权,会返回新的access_token和refresh_token。

<2>refresh_token没办法提前续期。

因为刚才说的第一点的特点,登录授权的时候他只有过期了才变,刷新的时候倒是刷一次变一次,但是没有提供刷新refresh_token的api,那么refresh_token是没办法提前续期让他平滑一直有效的,只能是过期了再去授权。





0 0
原创粉丝点击