热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OAuth2结合网站授权流程分析

第一步:组装URL请求获取授权码code???1.用户访问一个第三方URL网址,这时第三方服务端收到请求,组装URL,随机生成state并存储(Cookies、Session、My

第一步:组装 URL 请求获取授权码 code
    1. 用户访问一个第三方 URL 网址,这时第三方服务端收到请求,组装 URL,随机生成 state 并存储(COOKIEs、Session、Mysql等),然后引导用户请求访问该 URL(自动跳转到该 URL)
    2. 用户会被带到开放平台的授权网址页面,用户登录操作后,会跳转到第三方的回调地址,并且 URL 会带上 code 和 state

第二步:通过 code 获取 access_token
    1. 第三方服务端获取 code 和 state
    2. 第三方服务端验证 state,以确保该请求是第三方服务器自己发起的,防止 csrf 攻击
    3. 第三方服务端验证使用 code 加上 AppID、AppSecret 等,通过 API 接口换取 access_token(请求远程 API 获取远程数据)

第三步:通过 access_token 调用接口
    1. 第三方服务端获取到 access_token 后,通过 API 接口获取用户个人信息,并完成登录或注册动作,成为第三方用户

以上部分为授权并获取用户信息
接着第三方网站需要通过获取到的用户信息进一步操作(注册或登录)

1. 判断用户是否登录状态,是的话直接绑定用户
2. 非登录状态则查询该用户是否绑定,如果已经绑定则跳转,如果无绑定则忽略
3. 这时判断获取的用户信息组装的用户名是否存在,不存在则直接添加,存在则系统重新组装用户明,然后判断是否用户名是否在线,直到不存在添加用户为止
4. 这时继续判断添加用户的方法执行是否成功,不成功则提示注册失败,成功则拷贝用户头像并更新用户数据,然后执行登录。

1. 什么是授权临时票据(code)?
答:第三方通过 code 进行获取 access_token 的时候需要用到,code 的超时时间一般为几分钟(例如:10 分钟),一个 code 只能成功换取一次 access_token 即失效。code 的临时性和一次保障了授权登录的安全性。第三方可通过使用 https 和 state 参数,进一步加强自身授权登录的安全性。
 
2. 什么是授权作用域(scope)?
答:授权作用域 scope 代表用户授权给第三方的接口权限,第三方应用需要向开放平台申请使用相应 scope 的权限后,使用文档所述方式让用户进行授权,经过用户授权,获取到相应 access_token 后方可对接口进行调用。
通俗点来说就是,API 接口权限。例如:获取用户个人信息 get_user_info 接口、获取用户粉丝列表 get_fanslist(当然这些要开放平台有这些 API 才行,这里只是举例)

OAuth2 结合网站授权流程分析


推荐阅读
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 本文介绍了一种支付平台异步风控系统的架构模型,旨在为开发类似系统的工程师提供参考。 ... [详细]
  • 使用 Git Rebase -i 合并多个提交
    在开发过程中,频繁的小改动往往会生成多个提交记录。为了保持代码仓库的整洁,我们可以使用 git rebase -i 命令将多个提交合并成一个。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
author-avatar
heqiuhao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有