热门标签 | 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 结合网站授权流程分析


推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
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社区 版权所有