OAuth 2.0实战课
王新栋
京东资深架构师
立即订阅
2385 人已学习
课程目录
已完结 17 讲
0/2登录后,你可以任选2讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学OAuth 2.0?
免费
基础篇 (6讲)
01 | OAuth 2.0是要通过什么方式解决什么问题?
02 | 授权码许可类型中,为什么一定要有授权码?
03 | 授权服务:授权码和访问令牌的颁发流程是怎样的?
04 | 在OAuth 2.0中,如何使用JWT结构化令牌?
05 | 如何安全、快速地接入OAuth 2.0?
06 | 除了授权码许可类型,OAuth 2.0还支持什么授权流程?
进阶篇 (8讲)
07 | 如何在移动App中使用OAuth 2.0?
08 | 实践OAuth 2.0时,使用不当可能会导致哪些安全漏洞?
09 | 实战:利用OAuth 2.0实现一个OpenID Connect用户身份认证协议
10 | 串讲:OAuth 2.0的工作流程与安全问题
11 | 实战案例:使用Spring Security搭建一套基于JWT的OAuth 2.0架构
12 | 架构案例:基于OAuth 2.0/JWT的微服务参考架构
13 | 各大开放平台是如何使用OAuth 2.0的?
14 | 查漏补缺:OAuth 2.0 常见问题答疑
结束语 (2讲)
期末测试 | 一套习题,测试你的掌握程度
结束语 | 把学习当成一种习惯
OAuth 2.0实战课
15
15
1.0x
00:00/00:00
登录|注册

08 | 实践OAuth 2.0时,使用不当可能会导致哪些安全漏洞?

王新栋 2020-07-16
你好,我是王新栋。
当知道这一讲的主题是 OAuth 2.0 的安全漏洞时,你可能要问了:“OAuth 2.0 不是一种安全协议吗,不是保护 Web API 的吗?为啥 OAuth 2.0 自己还有安全的问题了呢?”
首先,OAuth 2.0 的确是一种安全协议。这没啥问题,但是它有很多使用规范,比如授权码是一个临时凭据只能被使用一次,要对重定向 URI 做校验等。那么,如果使用的时候你没有按照这样的规范来实施,就会有安全漏洞了。
其次,OAuth 2.0 既然是“生长”在互联网这个大环境中,就一样会面对互联网上常见安全风险的攻击,比如跨站请求伪造(Cross-site request forgery,CSRF)、跨站脚本攻击(Cross Site Scripting,XSS)。
最后,除了这些常见攻击类型外,OAuth 2.0 自身也有可被利用的安全漏洞,比如授权码失窃、重定向 URI 伪造。
所以,我们在实践 OAuth 2.0 的过程中,安全问题一定是重中之重。接下来,我挑选了 5 个典型的安全问题,其中 CSRF、XSS、水平越权这三种是互联网环境下常见的安全风险,授权码失窃和重定向 URI 被篡改属于 OAuth2.0“专属”的安全风险。接下来,我就和你一起看看这些安全风险的由来,以及如何应对吧。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《OAuth 2.0实战课》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥9.9
立即订阅
登录 后留言

精选留言(8)

  • Geek_94f887
    codeA绑定了appIdA和userIdA,为啥B能拿着appIdB和codeA,userIdB,userIdB不会验证通过,怎么可以获取到access_token?
    另外,老师举例的CSRF例子我看了三遍,都没看明白,有点混乱,不够清晰,建议重写一下,感谢!~

    作者回复:
    攻击者A并不是一个第三方开发者,他也是极客时间的一个合法用户,我们这里是有【三方软件A】是想说明这个攻击者“有能力”构建了一个软件页面。

    并不存在appidA,appid 一直是极客时间的appid,图中app_id_b也是极客时间的appid,这里用了“b”,只是想区分这两次“请求”。

    因为CSRF比较知名,咱们在文中并没有过多对它做基础性解释。在理解这篇文章CSRF攻击的例子时候,可以想象一个成语“移花接木”。

    2020-08-05
  • kylexy_0817
    王老师好,目前的开放平台接入服务,基本都要求在其管理后台配置回调地址吧?这样只要指定回调地址,用回调地址来校验,感觉不需要state参数也能避免CSRF攻击了吧?

    作者回复: 回调地址是一个固定的值,state在每次OAuth事务中是不一样的值,随机生成的值。

    2020-08-01
  • HeRui
    状态码那个不清楚,攻击脚本在用攻击者自己的授权码发给后端服务换取access_token不知道与授权码有什么关系
    2020-07-27
  • Invincible(・ิϖ・ิ)っ
    对于CSRF攻击有一个疑问:”有一个软件 A,我们让它来扮演攻击者,让它的开发者按照正常的流程使用极客时间。当该攻击者授权后,拿到授权码的值 codeA 之后,“立即按下了暂停键”,不继续往下走了。“ 这里授权码应该是返回到极客时间网站指定的的回调地址上了,攻击者是怎么控制流程不往下走的?

    作者回复: 是一种形象的比喻,实际上是指攻击者截获了授权码这个行为。

    2020-07-19
    1
  • 袁帅
    对于CSRF攻击有以下疑惑
        1. 攻击者A软件怎么知道 极课时间(B)的用于接受授权码的回调URL?
        2."如果这个时候用户 G 被攻击者软件 A 诱导而点击了这个恶意页面,那结果就是,极客时间使用 codeA 值去继续 OAuth 2.0 的流程了。这其实就走完了一个 CSRF 攻击的过程"
               软件A的诱导页面是怎么放到极课时间平台里的?
    3.极客时间通过codeA获取到了accessToken,但这一切都是在极客时间的后台完成的呀,攻击者A又是怎么得到token的?

    作者回复: 原图有一处描述不当,会引起大家理解偏差,现已修正。
    1、不需要知道URL;2、不需要嵌入极客时间平台,你可以理解为钓鱼页面,有个重要的前提是被攻击者已经在极客时间平台登录了,有登录态了;3、攻击者A并不是一个第三方开发者,他也是极客时间的一个合法用户,我们这里是有三方软件A是想说明这个攻击者构建了一个软件页面。

    2020-07-16
    1
  • 霹雳大仙pp
    极客时间A盗用极客时间B的授权码,绕过appid和authorization_code绑定关系检查。可以通过state参数来避免
    2020-07-16
  • 林光铣
    老师你好,如果要将一批硬件接入OAuth2.0系统,每个硬件作为一个动态客户端注册合适呢,还是硬件配套的后台服务作为一个客户端合适?

    作者回复: 动态注册的初衷解决的是有多个【外部】的API提供商的时候,不用客户端去分别多次到这样的提供商来进行事先注册,不然没对接一个就要注册一次。如果API提供方都是自己公司的其实把硬件设备和后台服务作为一个更合适,通设备号来区别每一个这样的硬件设备。

    2020-07-16
  • tt
    CSRF的本质是身份失窃,被恶意软件或者代码使用。下图中,恶意软件A正是通过将CODE_A和软件B的身份appid_b结合在一起。从而窃取了B的身份,进行了恶意操作。

    老师在课中提到,不能将OAuth2.0用于身份认证,在XSRF场景下具体指的是哪一步?因为OAuth2.0不就是利用appid和app_secret对三方软件的身份做认证的么?
    或者这里指的是用户G的身份?

    作者回复: 是的,我们讲的用户身份认证是指的最终用户的身份,也就是用户G或者小明。OAuth2.0首先呢确实并不能称为一个身份认证协议,它是一个授权协议,利用appid和app_secret只是验证了第三方软件的合法性,合法之后获取访问令牌以便代表小明去访问数据,代表的前提是小明对其进行了授权。

    在09我们会讲到在OAuth 2.0 的基础上,我们增加ID_TOKEN可以实现用户身份认证。

    2020-07-16
收起评论
8
返回
顶部