• OAuth2.0的refresh token


    最近看人人网的OAuth认证,发现他是OAuth2.0,之前一直看的是新浪的OAuth,是OAuth1.0.

    二者还是有很多不同的,主要的不同点在access token的获取方式.

    OAuth1.0的access token获取过来之后,就可以存到数据库里,然后长期使用,因为它有效期很长,通常有效期是无限的.

    但是OAuth2.0为了增强安全性,access token的有效期被大大缩短,通常只有几个小时,也可以申请增加到几十天,但是总是会有过期的时候.

    为此,OAuth2.0增加了一个refresh token的概念,这个token并不能用于请求api.它是用来在access token过期后刷新access token的一个标记.

    这里所描述的场景,通常是指那种长周期的应用.也就是需要一直保持用户在线的应用.

    在线并不是说用户一直在用这个应用,也可能是用户已经离开,我们在后台仍然可以自动维持用户的状态.例如一个自动发状态的应用.用户并不需要操作这个应用,我们会定时在后台利用用户的accesskey帮助用户发送状态.这也算是用户维持登录状态的一种.

    登录状态的维持,在OAuth中靠的是access token,只要我们的应用定时从数据库里取出用户的access token,然后利用access token就可以使用这个用户的身份去请求api了.

    在OAuth1.0中用户的登录状态是一直存在的.

    在OAuth2.0中用户的登录状态需要通过不断刷新来维持.

    例如上面提到的应用.假设更详细的场景,这个应用在用户授权之后,每天给用户的人人网发送一条状态报告当天的日期.

    用户授权之后,获取到一个access token和一个refresh token,还有一个是session key,这个是国内大多数开放平台自己添加的一个标记,可以让用户使用http来调用api,如果没有它,用户只能通过https来调用api.session key的生命周期和access token是相同的.

    我们把这三个值存到一个队列的数据库中.

    然后,在每天的10点,我们遍历这个数据库表,取出它的access token和session key,然后用他们去请求api,如果发现他们已经过期,我们就需要利用refresh token去重新刷新,获取新的access token和session key.然后利用他们去请求api,如果请求的时候提示refresh token也已经过期,那么这时候用户的登录状态就会过期,这说明这个用户至少2各月没有在此应用活跃了,这个活跃不光指用户自己在使用应用,也包括应用自动调用用户api的行为.

    每次刷新token的时候都会返回一个新的refresh token,所以说如果你的应用每个月帮用户发一条状态的话,走上面的流程,一直下去,这个用户的登录状态一直都不会过期,至于为什么,自己去琢磨哦,琢磨透了也就理解了.

     

    目前新浪微博的Oauth2.0的refresh token不对外开放。

  • 相关阅读:
    <二>基于Django 简单后台管理页面
    单页面中使用vue和iview、echarts,引用组件
    vuecli更新
    vuex promise async await
    vue父子组件之间传值
    常用正则
    vue项目利用loadsh实现防抖和节流
    vue项目实现按钮的权限
    使用内存虚拟硬盘 提高ArcGIS server并发性能的一种方法
    esri联邦用户大会 总结
  • 原文地址:https://www.cnblogs.com/yangzailu/p/9151516.html
Copyright © 2020-2023  润新知