OAuth2.0 里面的 state 参数是干什么的?

1.OAuth 2.0 的四种方式

  1. 授权码

    常见于个人用户第三方登录,比如通过微信、QQ、钉钉登录第三方应用。获取临时的access_token

  2. 隐藏式

    见于没有后端的web应用

  3. 密码式

    信任的应用,暴漏密码,由第三方应用去模拟登录

  4. 凭证式

    常见于应用对应用。分发给应用clientId和clientSecret来实现。

第一种和第四种是较为常见的形式。

2.拿钉钉的第三方应用统一授权来举例

  1. 钉钉开发者后台添加应用,为应用分配钉钉登录功能,配置回调地址;为应用分配相应的人员以及通讯录权限。

  2. 配置钉钉授权登录地址

详细文档可参考钉钉开发文档

https://login.dingtalk.com/oauth2/auth?
redirect_uri=
&response_type=code
&client_id=
&scope=openid
&state=
&prompt=consent

各个参数的意义:
redirect_uri:就是在开发者后台所填的回调地址
client_id:就是开发者后台的应用标识
state:跟随authCode原样返回。

3.state的意义

回到正体,来说一下state参数的意义。我们可以看到,钉钉开发文档中,说这个参数可以原样返回。如果原样返回,那是不是多此一举呢?那传这个参数的意义是什么呢?
    答:是为了防止CSRF 攻击。
啥是CSRF 攻击?(看官们肯定都已经知道了,我这里就是为我自己这个菜鸡做一个笔记)
CSRF(Cross-site request forgery),中文名称:跨站请求伪造你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。

那state是怎么防止CSRF攻击的呢?

你是用户a,你此时去访问第三方网站,调起推特的第三方授权登录,点击同意后,跳转到事先配置好的调转地址,也就是第三方网站的相应地址,第三方网站通过code做好获取临时授权码,和你在第三方网站的用户信息做好绑定映射。

以上,是一个正常的第三方登录流程。

但是,第三方网站上的映射关系可能被攻击者利用,问题就出在你在用你的信息登录时,无法保证第三方应用跳转获取临时授权码是同一次。这样你在第三方网站上,你的绑定映射关系就可能关联了别人。

state参数在推特的第三方授权成功后,会通过跳转地址一同返回给第三方网站,第三方网站收到请求后,通过state参数,知道了是哪一个用户的申请,杜绝了上面说到的情况。

更详细可以参考OAuth2.0官方文档关于授权码授权中关于state参数的介绍以及state参数CRSF的介绍

OAuth2.0 里面的 state 参数是干什么的?相关推荐

  1. codeTyphon7.0里面的cef版本是79.0.10,貌似79.xxx都可以用

    codeTyphon7.0里面的cef版本是79.0.10,貌似79.xxx都可以用,81.XXX,实测不能用,提示版本不对.3.XXX的也不行. 下载的时候要注意. 下载地址在pas提示里面 // ...

  2. oauth2.0里回调地址返回code中如何让code不显示在URL里?

    背景: 最近在调用对方提供的oauth2.0接口的时候,返回code在URL显示,但是会影响到本系统调用其他的菜单项的操作,所以想把返回的code值去掉. 解决办法:     想了各种解决办法,目前把 ...

  3. php jquery validate remote,jquery插件validate里面的remote参数用法

    validate验证在进行异步数据库查询验证的过程中用到了remote这个参数 remote里面有url,dataType,data,type等等这几个参数,当data不写的时候默认是当前被验证的字段 ...

  4. numpy 函数里面的axis参数的含义

    前言 numpy支持对矩阵和数组进行运算,因此很多numpy的很多运算都需要指定操作的维数参数axis(当然这些axis都有带默认值的),本博客以numpy.sum求和函数为例,具体分析axis参数不 ...

  5. laravel里面的validate参数介绍

    $this->validate([],[],[],[]); //第一个参数是需要进行验证的数据,第二个参数是规则数组,第三个是对进行验证的数据进行自定义显示需哦无信息,第四个参数是对于错误信息中 ...

  6. annotation-driven里面的argument-resolvers参数??

    2019独角兽企业重金招聘Python工程师标准>>> If you'd like to pass the current Device as an argument to one ...

  7. Spring Security OAuth2.0认证授权

    文章目录 1.基本概念 1.1.什么是认证 1.2 什么是会话 1.3什么是授权 1.4授权的数据模型 1.4 RBAC 1.4.1 基于角色的访问控制 2.基于Session的认证方式 3.整合案例 ...

  8. 使用Owin中间件搭建OAuth2.0认证授权服务器

    前言 这里主要总结下本人最近半个月关于搭建OAuth2.0服务器工作的经验.至于为何需要OAuth2.0.为何是Owin.什么是Owin等问题,不再赘述.我假定读者是使用Asp.Net,并需要搭建OA ...

  9. 天猫精灵智能设备对接(7) OAuth2.0

    在开始之前先放两篇参考,一篇英文http://bshaffer.github.io/oauth2-server-php-docs/cookbook/,一篇中文https://www.cnblogs.c ...

最新文章

  1. oracle级联删除表空间,Oracle表的创建.表空间创建删除,导入导出等
  2. Okhttp 插入缓存拦截器 解析
  3. Android 第二十一课 RecyclerView简单的应用之编写“精美”的聊天页面
  4. 【Python3网络爬虫开发实战】 3.1.3-解析链接
  5. stm32 断路功能和互补输出
  6. 华为mysql金融版_华为云数据库MySQL金融版公测,打造满足金融场景数据安全性的高端产品...
  7. 找到MySQL服务器发生SWAP罪魁祸首
  8. u-boot 2016.05 添加自己的board 以及config.h uboot移植
  9. wmv格式转html格式转换器,iPixSoft SWF to HTML5 Converter
  10. HTML5+CSS3之字体的下载使用
  11. 被食者与食者系统matlab,捕食者与被捕食者模型——Logistic-Volterra
  12. 挨踢人生路 记我的10年18家工作经历
  13. 【EtherCAT从站(SPI)扩展模块电路分析】
  14. python爬取美女_知乎大神用Python爬取高颜值美女(Python爬虫+人脸检测+颜值检测)...
  15. 服务器c盘logs文件夹,Win10系统Logs文件夹有什么作用Logs文件夹可以删除吗
  16. air android 后台运行,AIR Android:使用模拟器运行程序
  17. JQ实现小写金额转大写
  18. linux编译.o文件,使用-O0编译Linux内核
  19. 快速入门丨篇五:如何进行运动控制器输入/输出IO的应用?
  20. uniapp提示用户开启定位,跳转到开启定位页面

热门文章

  1. placement new的标准用法及用途
  2. libusb函数说明
  3. Python——turtle绘制动漫形象(魔法少女小圆晓美焰,super beautiful)
  4. OpenGL - SSAO
  5. 【随机过程】马尔可夫链(1)
  6. yii2框架_选择Yii 2框架的7个理由
  7. 如何查看linux系统版本
  8. 大数据入门第零天——总体课程体系概述
  9. Unity学习 — 23种设计模式
  10. OpenCV Eigen Sophus PCL G2O