当前位置: 首页 > news >正文

一键授权登录

OAuth 2.0模式

OAuth 2.0模式是第三方授权登录的常用模式

以acwing为例:

Client指自己网站的用户,Client发请求指用户点击第三方登录按钮;Web指自己网站的前后端;

第一步 申请授权码code
请求地址:https://www.acwing.com/third_party/api/oauth2/web/authorize/

参考示例:

请求方法:GET
https://www.acwing.com/third_party/api/oauth2/web/authorize/?appid=APPID&redirect_uri=REDIRECT_URI&scope=SCOPE&state=STATE
参数说明

state    否    用于判断请求和回调的一致性,授权成功后后原样返回。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数(如果是将第三方授权登录绑定到现有账号上,那么推荐用随机数 + user_id作为state的值,可以有效防止CSRF攻击)
返回说明
用户同意授权后会重定向到redirect_uri,返回参数为code和state。链接格式如下:

redirect_uri?code=CODE&state=STATE
如果用户拒绝授权,则不会发生重定向。

第二步 申请授权令牌access_token和用户的openid
请求地址:https://www.acwing.com/third_party/api/oauth2/access_token/

参考示例:

请求方法:GET
https://www.acwing.com/third_party/api/oauth2/access_token/?appid=APPID&secret=APPSECRET&code=CODE
参数说明

返回说明
申请成功示例:

{ "access_token": "ACCESS_TOKEN", "expires_in": 7200, "refresh_token": "REFRESH_TOKEN","openid": "OPENID", "scope": "SCOPE",
}


申请失败示例:

{"errcode": 40001,"errmsg": "code expired",  # 授权码过期
}


返回参数说明
参数    说明
access_token    授权令牌,有效期2小时
expires_in    授权令牌还有多久过期,单位(秒)
refresh_token    用于刷新access_token的令牌,有效期30天
openid    用户的id。每个AcWing用户在每个acapp中授权的openid是唯一的,可用于识别用户。
scope    用户授权的范围。目前范围为userinfo,包括用户名、头像
刷新access_token的有效期
access_token的有效期为2小时,时间较短。refresh_token的有效期为30天,可用于刷新access_token。刷新结果有两种:

如果access_token已过期,则生成一个新的access_token。
如果access_token未过期,则将当前的access_token的有效期延长为2小时。
参考示例:

请求方法:GET
https://www.acwing.com/third_party/api/oauth2/refresh_token/?appid=APPID&refresh_token=REFRESH_TOKEN
返回结果的格式与申请access_token相同。

第三步 申请用户信息
请求地址:https://www.acwing.com/third_party/api/meta/identity/getinfo/

参考示例:

请求方法:GET
https://www.acwing.com/third_party/api/meta/identity/getinfo/?access_token=ACCESS_TOKEN&openid=OPENID
参数说明
参数    是否必须    说明
access_token    是    第二步中获取的授权令牌
openid    是    第二步中获取的用户openid
返回说明
申请成功示例:

{'username': "USERNAME",'photo': "https:cdn.acwing.com/xxxxx"
}


申请失败示例:

{'errcode': "40004",'errmsg': "access_token expired"  # 授权令牌过期
}

http://www.dtcms.com/a/341797.html

相关文章:

  • Windows暂停更新10年最简单的设置
  • UNet改进(33):基于CBAM原理与PyTorch实战指南
  • 可信数据空间关键技术和功能架构研究
  • RAG流程全解析:从数据到精准答案
  • 地区电影市场分析:用Python爬虫抓取猫眼_灯塔专业版各地区票房
  • 不止效率工具:AI 在创意领域的 “叛逆生长”—— 从文案生成到艺术创作的突围
  • 【蒸蒸日上】专栏前言
  • 我的创作纪念日-2048天
  • 动态规划----6.单词拆分
  • 关于 Flask 3.0+的 框架的一些复习差异点
  • 在 Linux 和 Docker 中部署 MinIO 对象存储
  • 深入解析:生产环境 SQL 数据库的架构设计与工程实践
  • 税务专业人员能力构建与发展路径指南
  • ubuntu系统上的conda虚拟环境导出方便下次安装
  • 【网络运维】Linux 文本搜索利器: grep命令
  • JavaBean中首字母小写第二个字母大写属性转换异常详解
  • GIT总结一键式命令清单(顺序执行)
  • redis---常用数据类型及内部编码
  • 官网SSO登录系统的企业架构设计全过程
  • 七十四、【Linux数据库】MySQL数据库存储引擎
  • 11让LLM更懂FunctionCalling返回值
  • S32K3 的图形化配置和EB配置mcal差异
  • week2-[二维数组]排队
  • MySQL/Kafka数据集成同步,增量同步及全量同步
  • Windows 如何清理右键菜单?电脑桌面右键菜单里出现一个清理内存 怎么去掉?
  • 数据结构中邻接矩阵中的无向图和有向图
  • 流固耦合|01流固耦合分类
  • 面试 TOP101 二分查找/排序专题题解汇总Java版(BM17 —— BM22)
  • Alpha测试:软件上线前的关键环节
  • 意象框架:连接感知与认知的统一信息结构分析——基于上古汉语同源词意义系统的词源学与认知语言学探索