OAuth2.0知识点

OAuth2.0介绍

一个关于授权的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务器提供者上的信息,不需要将用户名和用户密码提供给第三方应用或者分享他们数据的所有内容。

应用场景

  1. 第三方应用授权登录 ,比如QQ,微博,微信的授权登录;
  2. 前后端分离页面应用:前后端分离框架,前端请求后台数据,需要进行OAuth2.0安全认证

主要模式

  1. 授权码模式: 第三方应用先申请一个Authorization Code,然后根据该码获取令牌。微博,微信,返回的是app_code,就是一个授权码。
    在这里插入图片描述

基本流程

  • 用户点击第三方登录按钮(微博,微信等),浏览器跳转到第三方的授权页面。
  • 用户输入账号密码,进行授权。
  • 第三方收到用户的授权后,将授权码app_code回调到指定的应用。
  • 应用根据app_code向第三方服务器请求access_token,
  • 第三方服务器返回 access_token给应用,
  • 应用获取到access_token后向第三方请求用户的基本信息,性别,头像,昵称,地区。
    在这里插入图片描述

Token 的常见问题

  • Token过期的解决方案:
    一般有两种解决方案:一种是单token ,另一种是双token.
  1. 单token方案: 一般需要定时刷新
    具体流程
    1. 前端向后端发送请求,携带token
    2. 后端对token进行校验,token过期,向前端返回通知。
    3. 前端向后端发起请求刷新 token。
    4. 后端判断距离上次登录时间是否超过规定的时间(一般是72小时),如果未超过,向前端返回新的token_B; 如果超过72小时,拒绝刷新token请求,请求失败,跳转到登录页面。后端需要记录每次用户的登录时间,每次用户请求时去检查最后一次登录日期。
    5. 前端发送新的请求并携带新的token,后端验证后返回数据。
      在这里插入图片描述
  2. 双token方案: access_token + refresh_token
    1. 登录成功后,后端返回一个access_token和一个refresh_token,客户端缓存此两种token
    2. 使用access_token请求接口资源,如果access_token过期,使用refresh_token获取新的access_token.
    3. 后端接受刷新token的请求后,检查refresh_token是否过期,如果过期,拒绝刷新,客户端收到该状态后,跳转到登录页;如果未过期,生成新的access_token 返回给客户端。
    4. 客户端携带新的access_token 重新调用上面的资源接口。
    5. 客户端退出登录或修改密码后,注销旧的token,使access_token和refresh_token失效,同时清空客户端的access_token和refresh_token;

具体应用
微信网页授权方案

  • 用户在第三方应用的网页上完成微信授权以后,第三方应用可以获得 code(授权码)。code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。
  • 第三方应用通过code获取网页授权凭证access_token和刷新凭证 refresh_token。
  • access_token是调用授权关系接口的调用凭证,由于access_token有效期(2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新。
  • refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。
    后端实现token过期利用Redis来存储token,设置redis的键值对的过期时间。如果发现redis中不存在token的记录,说明token已经过期了。

猜你喜欢

转载自blog.csdn.net/YuannaY/article/details/130059897
今日推荐