微服务架构实战 160 讲
杨波
拍拍贷研发总监、资深架构师、微服务技术专家
48732 人已学习
新⼈⾸单¥98
课程目录
已完结/共 171 讲
微服务架构实战 160 讲
登录|注册
留言
32
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 06 | OAuth2 模式该如何选型
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 第一模块课程介绍
02 | 微服务安全要解决什么问题
03 | 白话 OAuth2
04 | OAuth2 的正式定义
05 | OAuth2 有哪些典型模式
06 | OAuth2 模式该如何选型
07 | Spring Security OAuth2 架构简介
08 |【实验】授权码模式授权服务器
09 |【实验】简化模式授权服务器
10 |【实验】密码模式授权服务器
11 |【实验】客户端模式授权服务器
12 | 实验一扩展环节
13 |【实验】Web 应用接入授权服务器
14 | 实验二扩展环节
15 | 什么是 JWT 令牌
16 |【实验】授权服务器支持 JWT 令牌
17 | 实验三扩展环节
18 |【实验】Android 无线应用接入授权服务器
19 |【实验】AngularJS 单页应用实验和课后扩展
20 |【实验】GitHub社交登录实验和课后扩展
21 | 【实验】OAuth2安全风险CSRF实验
22 | OpenId Connect简介
23 | 下一代微服务安全架构
24 | 参考资源和后续课程预览
25 | Apollo作者的产品介绍
26 | 第二模块课程介绍
27 | 课程概述
28 | 业务需求
29 | 配置定义和场景
30 | 开关驱动开发原理
31 | 携程 Apollo 配置中心介绍
32 | Apollo核心概念
33 | Apollo快速起步(Lab01)
34 | Apollo快速起步扩展实验
35 | Apollo架构设计之服务器端
36 | Apollo架构设计之客户端
37 | Apollo架构设计之高可用和监控
38 | Apollo分布式部署指南
39 | Apollo Java客户端和多语言接入
40 | Apollo Client API实操(Lab02)
41 | Apollo Client和Spring集成~XML方式(Lab03)
42 | Apollo Client和Spring集成~代码方式(Lab04)
43 | Apollo Client和Spring Boot集成(Lab05)
44 | Apollo开放平台接入实操(Lab06)
45 | Spring Cloud Config简介
46 | Apollo vs Spring Cloud Config
47 | Apollo FAQ和开发常见问题
48 | 参考资源和后续课程预览
49 | 第三模块课程介绍
50 | Zuul网关和基本应用场景
51 | Zuul网关高级应用场景
52 | Zuul网关架构剖析
53 | Zuul网关代码剖析(Code Review)
54 | Zuul网关过滤器管理工具(Code Review)
55 | 前置过滤器实验(Lab01)
56 | 路由过滤器实验(Lab02)
57 | 后置过滤器实验(Lab03)
58 | Zuul网关对接Apollo(Lab04)
59 | Zuul网关生产部署实践
60 | Zuul网关路由管理实践
61 | 基于网关的两层路由体系
62 | Spring Cloud Zuul(Lab05)
63 | Zuul2.0简介
64 | Zuul网关生产最佳实践
65 | 参考资源和后续课程预览
66 | 第四模块课程介绍
67 | 调用链监控业务需求
68 | 调用链监控原理
69 | 调用链监控产品和比较
70 | 点评 CAT 背景介绍
71 | CAT 典型报表
72 | CAT 告警简介
73 | CAT 架构设计
74 |【实验】CAT 本地部署
75 | CAT 埋点案例和代码剖析(Code Review)
76 |【实验】CAT 埋点案例
77 | Zuul 网关集成 CAT 代码剖析(Code Review)
78 |【实验】Zuul 网关集成 CAT
79 | CAT 生产埋点实践
80 | CAT 生产部署实践
81 | CAT 生产治理实践
82 | Spring Cloud Sleuth 简介
83 |【实验】Spring Cloud Sleuth
84 | 参考资源和后续课程预览
85 | 第五模块课程介绍
86 | 容错限流需求
87 | 容错限流原理
88 | Netflix Hystrix 背景介绍
89 | Hystrix 设计原理
90 | Hystrix 主要概念
91 | 信号量 vs 线程池隔离
92 | Hystrix 主要配置项
93 |【实验】Hystrix 基础实验
94 | Hystrix 模拟案例分析 (Code Review)
95 |【实验】Hystrix + Dashboard 实验(上)
96 |【实验】Hystrix + Dashboard 实验(下)
97 | 网关集成 Hystrix (Code Review)
98 |【实验】Spring Cloud Hystrix 实验
99 | Netflix Turbine 简介
100 | Hystrix 生产最佳实践
101 | 参考资源和后续课程预览
102 | 第六模块课程介绍
103 | 服务发现需求和模式(上)
104 | 服务发现需求和模式(下)
105 | Netflix Eureka 和 Ribbon 背景介绍
106 | Eureka 和 Ribbon 架构设计原理
107 |【实验】Spring Cloud Eureka 和 Ribbon 基础实战
108 |【实验】Spring Cloud Eureka 和 Ribbon 高级实验
109 | Spring Cloud Eureka 和 Ribbon 主要配置项
110 | Eureka进阶:自保护模式
111 | Eureka进阶:健康检查和蓝绿部署
112 |【实验】Spring Cloud Zuul、Eureka 和 Ribbon 集成实验(上)
113 |【实验】Spring Cloud Zuul、Eureka 和 Ribbon 集成实验(下)
114 | 常用服务发现组件比较
115 | ServiceMesh 和 Istio 简介
116 | 基于 Eureka、Zuul 和容器云的持续交付架构
117 | 参考资源和后续课程预览
118 | 第七模块课程介绍
119 | 监控模式分类
120 | BusDevOps 和测量驱动开发 MDD
121 | Prometheus 简介
122 | Prometheus 架构设计
123 | Prometheus 基本概念
124 |【实验】Prometheus 起步查询实验(上)
125 |【实验】Prometheus起步查询实验(中)
126 |【实验】Prometheus起步查询实验(下)
127 |【实验】Prometheus + Grafana 展示实验(上)
128 |【实验】Prometheus + Grafana 展示实验(下)
129 |【实验】Prometheus + Alertmanager 告警实验(上)
130 |【实验】Prometheus + Alertmanager 告警实验(下)
131 |【实验】Java 应用埋点和监控实验
132 |【实验】NodeExporter 系统监控实验
133 |【实验】Spring Boot Actuator 监控实验
134 | Prometheus 监控最佳实践
135 | 主流开源时序数据库比较
136 | 开源分布式监控平台 ZMon 简介
137 | 微服务监控体系总结
138 | 参考资源和后续课程预览
139 | 课程概述和背景
140 | 架构和设计
141 | 开发环境搭建
142 | 基础代码(code review)
143 | 数据访问模块(code review)
144 | OAuth2服务模块(code review)
145 | Web服务模块(code review)
146 | 启动流程(code review)
147 | 起步准备实验(lab02)
148 | OAuth2授权码模式实验(lab03)
149 | OAuth2简化模式实验(lab04)
150 | OAuth2用户名密码模式实验(lab05)
151 | OAuth2客户端模式实验(lab06)
152 | OAuth2令牌校验实验(lab07)
153 | OAuth2令牌刷新实验(lab08)
154 | 项目复盘和扩展环节
155 | 参考资源和后续课程预览
156 | 课程概述和背景
157 | 需求和架构设计
158 | 开发环境搭建(lab01)(上)
159 | 开发环境搭建(lab01)(下)
160 | 项目业务代码(Code Review)
161 | Apollo配置中心集成(lab02)
162 | Zuul-Eureka-Ribbon-Hystrix集成(Code Review)
163 | Gravitee OAuth2集成(lab03)
164 | Zuul网关集中令牌校验(Code Review)
165 | CAT调用链集成(lab04)(上)
166 | CAT调用链集成(lab04)(下)
167 | Demo展示(lab05)(上)
168 | Demo展示(lab05)(下)
169 | Prometheus监控集成(Code Review)
170 | 生产扩展环节
171 | 课程复盘总结&结课测试
本节摘要

温馨提示

部分 Android 用户如果在全屏播放时遇到问题,建议使用 PC 版或微信小程序进行学习。给您造成的不便还请谅解,我们会尽快解决这一问题。

PC 端学习方式

小程序学习方式

  • 进入极客时间小程序
  • 在视频课程里选择相应内容
登录 后留言

全部留言(32)

  • 最新
  • 精选
gatspy
谢谢波波老师的精彩内容,有个问题请教老师,授权码模式中 “假定资源拥有者和客户在不同的设备上”怎么理解呢?资源拥有者不是授权客户前端渠道后,AS才发放令牌到客户的后端服务吗?这个时候资源拥有者和客户前端渠道是在同一台设备上的吧

作者回复: 在授权码模式中,这里的客户是指客户端应用,一般在一个Web服务器上,资源拥有者一般使用自己的设备(PC或笔记本或手机),通过客户应用(Web服务器设备)去访问自己在其它服务器上资源。

2018-07-03
8
libocz
老师能把资源拥有者,客户,公开客户应用,user-agent这4个概念的区分点帮我们指出来吗?实在看的一头雾水

作者回复: 你好,举个例子,你在github上有一些项目,你就是资源(项目)拥有者(resource owner),你可以利用github提供的开放API开发一个应用,用它可以查看甚至操作你在github上的项目,这个应用叫客户应用(client app)。如果这个应用是一个web应用,它被部署在一个web服务器上,那么它是一个私密应用,在web服务器上可以存储该应用的客户标识+凭证(client id+secret),你需要使用浏览器(user-agent)访问这个应用,但是客户标识+凭证(包括令牌)不会被浏览器看到,所以叫私密应用。如果你开发的应用不是部署在web服务器上的,而是直接加载到用户端浏览器的单页应用,或者无线原生应用,这些应用会直接操作令牌,那么它们被称为公开应用,公开应用只存储客户标识(client id),不能存储客户凭证(client secret),否则会被用户看到可能泄漏,所以叫公开客户应用。另外建议看下OAuth2最简向导ppt:https://github.com/spring2go/oauth2lab/blob/master/ppt/

2019-03-02
4
丁文波
我现在工作的单位,实际场景和需求是:几个服务器,但这几个服务器登录不要互通,只想新增一个认证授权服务器,这几个服务器都通过一个认证服务器完成登录授权操作,我看了oauth的视频,但有些疑惑,用户信息是存到认证服务器上吗?其它服务器也会用到用户信息,需要也存一份吗?怎么设计这个认证授权服务

作者回复: 有两种设计: 一种是用户信息集中存在认证服务器上,其它服务器通过认证服务集中登录,后面需要用户数据的话,则拿令牌集中到认证服务器上去查用户数据。 另外一种做法是认证服务器上只存一个账户id(用户注册时建立),具体用户信息,各个业务应用根据需要自己存一份,但是表中要记录用户和账户id的关联,这样通过认证服务器登录后,可以获取到账户id,然后通过账户id去查各自的用户数据。

2019-12-06
3
一剑
终于弄明白了客户端的含义,其实就是谁持有令牌,谁就是客户端:比方说服务器渲染的WebApp,从头到尾都是WebApp使用令牌去访问资源服务器;又比如SPA或者原生APP,他们也是使用令牌去访问资源服务器,有同学可能会说SPA也是服务器上加载来的,那为啥不算服务器是客户端?其实服务器只是宿主,浏览器才是程序真正的执行者。不过在现代前后端分离的大趋势下,SPA也并不一定非得使用简化模式,也会充当“User-Agent”的角色,真正的客户端还是服务器,比如典型的案例:微信登录。 另外有两个问题请教老师: 1. “根据RFC6749,授权码模式,用户名密码模式和客户端模式,必须传client_id/secret进行客户应用认证。简化模式只需传client_id。” 问题:公开应用之前说的是不能保存client secret的,然后按照ppt里的选型流程:第一方公开应用(SPA或原生APP)是使用用户名密码模式,如何按照上面这个规则传递client secret呢?如果不传递似乎就无法证明应用的身份 2. “电商后台web管理系统应该算(只要不是单页应用),如果要访问内部API且内部有OAUTH认证授权服务的话,建议用标准授权码模式。当然视具体情况,企业内部如果安全不严格的话用简化模式或密码模式,甚至不走OAUTH直连API也OK。” 问题:在现实场景下,一般用户会分多种类型,比如内部员工和外部客户,内外系统都有认证和授权需求,个人感觉OAuth似乎很难同时满足多用户类型的支持,需要分别部署两套OAuth?

作者回复: 你好,你学习很仔细,有思考,赞! 关于第1个问题:第一方公开应用,如果使用用户名密码模式,原生APP是可以把clientId/secret编码在代码里头的,最后编译成二进制,一般不易拿到。如果是SPA,对于无线应用,可以考虑hybrid混合模式,clientId/secret也可以考虑编码在代码里头,如果是纯SPA,为安全考虑,可以考虑服务端配合,相当于一种授权码模式变体。 实际很多企业的第一方应用,大都采用用户名密码模式,但不是严格OAuth,也就是说clientId/secret都不传递,或者只传一个应用标识,做统计跟踪用。既然是第一方官方应用,一般和官方域名绑定,或者要经过appstore严格审核,很难伪造获利。 关于问题2:企业分内外客户的话,的确去要考虑部署两套OAuth服务,或者采用支持多租户的OAuth服务(可以参考FusionAuth(fusionauth.io))。

2019-09-19
3
SoulEdge
波波老师的回复率应该是所有课程里最高的,赞一个

作者回复: 谢谢支持!加油!

2019-08-06
3
载曜之始
老师,单页应用是指spa(single page application),也就是利用html5,ajax和后台server交互?有后台服务器的话,是不是也应该是走授权码模式?

作者回复: 单页是指纯静态,js/html/逻辑都跑在客户端agent(如浏览器中),后台服务器只做静态资源的hosting,无逻辑。凡后台服务器端有计算逻辑的,即使前端页面用ajax,也应该考虑走授权码模式。

2018-06-06
3
fomy
资源拥有者和用户不是同一个概念吗?能举例说明一下吗?

作者回复: 可以简单认为是一个概念,资源拥有者是OAuth的术语,假设极客时间开发的app可以支持微信联合登录,你在微信上有用户数据(资源),你就是资源拥有者,可以授权极客时间app去访问你在微信上的数据(联合登录)

2018-05-13
2
3
凯文1985
还是不是很理解,如果app是第三方开发的 然后选取了authorization code的实现方式 那么第三方的app 也是拿到了authorization code 用来获取下一步的access token,那么这样的方式不也是不安全的吗 第三方app可以拿着authorization code做任意事情?

作者回复: authcode只能用来换取对应的那个token,不能干其它事情,而且有时效性。

2018-08-04
2
duer
谢谢老师,不知道视频的录制最大音量可否调大一些,在地铁上用耳机都有点儿听不清了。最好和音频产品的一样大,谢谢

作者回复: 谢谢建议🌹已经反馈极客时间

2018-05-11
2
Mars
请问下老师,客户类型是单页应用SPA或者原生App,如果都是第三方,为什么选型不同呢?为什么不都使用Implicit Grant 或者都使用 Auth Code Grant呢?

作者回复: 你好,课程推荐的OAuth2选型方式还是比较传统的做法,但是这几年OAuth2选型有了新的发展,考虑到简化模式(Implicit Grant)不安全,所以对于第三方的单页SPA和原生App,都推荐使用带PKCE扩展的授权码模式(Authorization Code Flow with Proof Key for Code Exchange (PKCE)),关于具体选型流程,下面是一些参考: https://auth0.com/docs/authorization/which-oauth-2-0-flow-should-i-use https://auth0.com/docs/flows/authorization-code-flow-with-proof-key-for-code-exchange-pkce https://dzone.com/articles/what-is-pkce https://blog.postman.com/pkce-oauth-how-to/

2020-10-03
1
收起评论