结束语 | 把学习当成一种习惯

你好,我是王新栋。

当你来到这节课的时候,我们的课程已经接近尾声,相信你在课程的学习中都有所收获。在最后的这节课,我想跟你谈一谈如何学习OAuth 2.0 这门技术。

在谈起如何学习这个话题的时候,我很愿意跟你分享我的一些经历和经验。我个人认为,学习从来都不是一件容易的事情,夸张一点讲有点“反人性”。你想啊,谁不愿意,在工作忙碌了一天后,晚上回家多陪陪家人;又有谁不愿意,到了周末去找几个朋友打打篮球或者陪女朋友看看电影呢。但是,学习一定要养成一种习惯。我在《程序员思维修炼》这本书中读到这么一段话,分享给你:

知识投资也是一样。你需要定期投资最低限度的时间量。养成一种习惯,如果需要的话。躲到你的家庭办公室里去或者走进有无线网络的咖啡厅。并非每期学习都同样富有成效,但是只要定期安排学习,长期来看一定会成功。如果你一直在等待空闲时间或者等待灵感的突现,那么它永远都不会发生。

在具备了上面所述的“定力”以后,我再和你谈一谈具体的学习方法。

我按照层次由低到高把学习分为基础学习、分析学习和主题学习

  • 基础学习,就是从知识点最基本的理论开始学习;
  • 分析学习,就是对知识的结构脉络做梳理,并带着问题去学习;
  • 主题学习,就是对同一个知识点,分别找到不同的资料来学习。

这样看,基础学习和分析学习属于“点”的学习,而主题学习就属于“面”的学习,整体下来就是从点到面构建知识网络的过程。接下来,我就和你说说OAuth 2.0的学习,是怎么对应到这三个层次的。

在基础学习的过程中,我们要学习OAuth 2.0的四种基本角色,包括资源拥有者(也就是用户)、客户端(也就是第三方软件)、授权服务、受保护资源服务;还要学OAuth 2.0的四种基本授权许可类型,包括授权码许可类型、隐式许可类型、客户端凭据许可类型、资源拥有者凭据许可类型。

当确定了基础学习阶段的学习范围之后,我们就要将这些角色带入到每个许可类型中,让这些角色“转起来”,这时你就可以像我一样用小明使用小兔打单软件的例子串起整个OAuth 2.0的工作流程。

在分析学习的过程中,我们就需要将OAuth 2.0 的知识体系结构进行一个梳理,同时把学习时遇到的问题都列出来,然后逐一分析。这些问题可能是:为什么授权码许可流程一定要有授权码,为什么授权码许可一定要有两次重定向,如何管理JWT格式的令牌的生命周期,当访问令牌失效了一定要让用户重新授权吗,刷新令牌会一直有效吗,ID令牌和访问令牌之间有联系吗,等等。

在主题学习的过程中,我们可以把要重点理解的内容当成一个主题,去“横向”地学习。怎么才能叫做横向呢?比如,要知道PKCE到底解决了什么问题,那么你就可以把PKCE当成一个主题来学习,你要去查阅跟它相关的任何资料,可以找OAuth 2.0 的官方文档,可以看咱们的专栏,也可以看其它与之相关的书籍等等。总之,这是你的一个“研究方向”。

在掌握了基础学习、分析学习和主题学习这三个层次的学习方法之后,我还有一招儿,就是配合 “输出倒逼输入”来加强学习效果。

有一天我在图书馆看书时,回想起自己这些年在公司内外做分享和写书的经历,猛然间脑子里面蹦出了“输出倒逼输入”这个词儿,一下子想通了输出对于技术学习的重要性。再后来,我刷朋友圈里别人分享的文章时,也看到了这个词。再到后来,我在读《如何阅读一本书》时,看到了其中有这样一句话“阅读与写作的互惠”,又再次印证了这一点。

那我再分享自己的一个小故事吧。有一年618刚结束,京东大学的同事就来找我,问我愿不愿意做一次618大促备战的复盘分享,而且要在一周内准备好要分享的内容。虽然时间很紧张,我也不知道自己要分享什么内容,甚至连思路都还不清晰,但我还是毫不犹豫地答应了下来。输出倒逼输入嘛。

在接下来的准备时间里,我从要备战内容的点点滴滴,到系统黄金流程的识别过程,再到人员的培训,分别进行了梳理,逐渐形成了自己的一套备战方法论,完成了那次的大促复盘分享,也获得了同事们的很多正反馈。

你看,要不是因为有“输出”的逼迫感,我可能就不会去做这个复盘,也不会沉淀自己的方法论。正所谓备战在平时,后来我和团队就把这套备战方法论落到了日常工作中,时刻保证着系统的稳定运行。

这就让我无比坚信,“输出倒逼输入”是一个绝好的学习方式。

那具体到我们的课程中,该怎么运用这个方法呢?

最简单的,自然就是留言了。永远不要觉得看完文章就是学会了,要知道,任何一种思想都不可避免地带有局限性,想要拥有更高维度的见解,前提是你见识过足够多、足够好的东西。

因此,你要多输出自己的想法,抛出引子,比如你对某些内容的深入思考、你在工作中积累的独特经验,甚至是你对我的一些观点的质疑,等等。我和其他同学看到了你的留言,也会和你讨论,我们的思想交叠碰撞,你的知识厚度必定会有所增加。

除了零碎的留言,你还可以进行系统的梳理,制作一些思维导图、PPT,或者是写成文章,在公司内部做一场分享。最后,你得到的是一套知识体系,同时也可以增加你在公司里的“出镜率”,这是不是一举多得呢?

当然,这种方式绝不仅限于咱们课程的学习,希望你总能积极地向外传达你的想法。带着惊喜的输出亮相,理所当然地会得到未知的惊喜。

到这里,我们相伴而行的时光也就接近尾声了,接下来,我们要回归各自的赛道了。在此之前,我很想很想跟你说一句“敬佩”。

你不知道的是,在你坚持学习的时候,有很多人都掉了队,站在终点回头去看,不知不觉中你就成为了极少数人。放大到整个人生去看,只要持续走极少数人走的路,你就能成为极少数人。

“将每一个忙碌、充实的日子,累积成酣畅淋漓的生命”,希望我们都能活到淋漓,与你共勉。

我在这里为你准备了一份毕业问卷,题目不多,希望你能花两分钟填一下。我非常期待能听你和我说一说,你对这个课程的想法和建议。今天虽然是结课,但我还会继续关注你的留言,也希望你能继续学习这个课程的内容,并会通过留言区和你互动。最后,再次和你一声“感谢”。

精选留言

  • Geek_883762

    2020-08-04 19:19:42

    当老师说再见的时候,我哭了。
    作者回复

    我被感动到了,我会尽最大努力回复好每一位同学的留言。

    2020-08-12 14:40:14

  • Dark

    2020-08-04 08:34:33

    马上买了一本《程序员思维修炼》,哈哈
    作者回复

    哈哈 一起变得更加优秀

    2020-08-04 08:43:49

  • 亚林

    2021-06-03 12:40:27

    知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。物有本末,事有终始,知所先后,则近道矣。(By《大学》)
  • 在路上

    2020-08-04 21:29:04

    感谢老师的精彩讲解,现在每次授权登录时,都想到老师讲些的后台流程。
    作者回复

    多谢 ^_^

    2020-08-12 09:16:51

  • zeroki

    2020-08-07 22:27:32

    “鉴权”是建议在开放平台的网关做呢,还是授权服务做呢?
    作者回复

    放在网关来做,读取授权服务的接口或者是直接操作授权服务的数据存储。

    2020-08-11 20:40:00

  • inrtyx

    2020-08-04 07:13:41

    难说再见,谢谢老师
    作者回复

    我会一直在的 ^_^

    2020-08-04 08:44:27

  • 动物不困

    2021-10-29 08:10:06

    日拱一卒,功不唐捐。加油!
  • 2023-04-09 10:45:30

    讲的不怎么样 东拼西凑的东西 还好意思要那么高的价格
  • 武将。。。

    2022-10-22 18:00:46

    感谢王老师的带领学习,以前知识了解,并没有这么系统深入地学习,这次听了王老师的课程,对其有了更加深入地了解,感谢!
  • 码小呆

    2022-10-16 15:58:38

    没有女朋友,😭😭😭😭😭
  • 陶乐乐

    2022-04-15 00:07:50

    很认同老师的观点,一个就是学习的三个阶段:由基础的理论学习--》针对问题的思考学习---》全面系统的认知的过程。另外一个重点便是:一定得想办法输出,很多学习如果仅仅是看,因为没有自己的思考加工,很容易就会忘记。总结并形成图形,文字是很重要的过程学习
  • jiangb

    2022-02-11 16:55:59

    感谢老师,对OAuth2.0的知识体系有了深入的了解,下一步要实践SpringSecurity OAuth2,应用在公司产品上。
  • Krystal

    2021-11-01 10:17:26

    老师,关于输出倒逼输入这个学习方法,我非常认同,学习后做技术分享,但是作为一个管理者,可能在团队中执行的时候,不会宣导这个目的,最终在团队中执行的时候搞得队员不认可,没几周就停止了,后面他们都说学习是自己的事情,这个分享让他们不舒服,他们不乐意做,不知道老师有没有遇到过这种情况,或者能否给下指导意见?谢谢
  • 良胜

    2021-03-29 10:27:44

    老师,我现在要做一个需求,app侧打开H5页面,这个要用授权码登录,但是spring oauth2获取授权需要处于登录态,这个怎么处理;另外默认的授权码是报存在数据库里的,怎么扩展成jwt存储的格式
  • 王刚

    2020-11-09 13:48:19

    才看完,感谢分享!
  • 曙光

    2020-09-17 13:01:59

    谢谢老师的分享,我也是输出倒逼输入,想在工作中使用Oauth2.0,提升安全性,在两周内学完理论。下一步是跑通案例代码,在应用到工作中。谢谢老师
  • 开心哥

    2020-08-31 21:12:43

    酣畅淋漓,学的痛快!感谢老师,快上新课😃😃
  • Younger Ku

    2020-08-20 16:31:38

    江湖路远,有缘再见(抱拳)
  • Younger Ku

    2020-08-20 16:21:23

    感觉scope和api的对应关系跟角色和资源url的对应关系很像,但是角色通常分配给用户,scope通常分配给第三方应用。是这样的吗?
  • 哈德韦

    2020-08-16 16:56:22

    老师好,微信PC扫码登录就是一个标准的OAuth 2.0流程,用户扫码后,手机微信弹出确认框。用户确认后,微信重定向到开发者回调网址,带上code,之后开发者网站使用code换取accessToken等。但是也有网站(比如石墨文档),PC扫码登录实际上利用了微信的带参二维码,用户扫码后直接跳转到了其公众号,而微信服务器直接将用户信息发送给石墨服务器,石墨利用这些信息直接将用户登录。请问这种利用带参二维码形式的PC扫码登录,其安全性会比标准的OAuth 2.0差吗?由于微信服务器发送用户信息给开服务器时是加密的,是否可以保证其安全性呢?
    作者回复

    我试了下石墨文档,现在也是采用了扫码登陆了,不过你说的这个关注二维码之后再登录,我印象中CSDN这样做过。

    这个我们可以开放性讨论下,我看了下微信官方的文档,微信的带参二维码应该属于渠道码,一般用作对引流数据的统计。原理应该就是使用一个EvenkKey,当有人扫描这个二维码后,微信会推送给开发者这个EventKey,然后开发者在可以对此次事件做一些响应动作。

    我个人认为如果拿这种方式用作登录的话,其背后还是OAuth机制,上面说的那种关注公众号才能登录,是建立在次基础上的。

    2020-08-18 09:16:09