oauth原理解析

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值