笔记 笔记
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

EasT-Duan

Java 开发
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

购买兑换码请添加

添加时候请写好备注,否则无法通过。

  • Java 核心技术面试精讲

  • Java 业务开发常见错误 100 例

  • MySQL 实战 45 讲

  • OAuth 2.0 实战课

    • 开篇词

      • 为什么要学 OAuth 2.0
        • OAuth 2.0 是什么?
        • 为什么会有这门课?
        • 这门课是怎么设计的?
    • 基础篇

    • 进阶篇

  • Redis 核心技术与实战

  • 软考专栏

目录

为什么要学 OAuth 2.0

欢迎来到我的 ChatGPT 中转站,极具性价比,为付费不方便的朋友提供便利,有需求的可以添加左侧 QQ 二维码,另外,邀请新用户能获取余额哦!最后说一句,那啥:请自觉遵守《生成式人工智能服务管理暂行办法》。

# OAuth 2.0 是什么?

那,OAuth 2.0 到底是什么呢?我们先从字面上来分析下。OAuth 2.0 一词中的 “Auth” 表示 “授权”,字母 “O” 是 Open 的简称,表示 “开放” ,连在一起就表示 “开放授权”。这也是为什么我们使用 OAuth 的场景,通常发生在开放平台的环境下。

看到这里,你可能会说应该还有 OAuth 1.0 吧。没错,OAuth 2.0 之前就是 OAuth 1.0。现在,我就来和你说说这两个版本的 OAuth 有什么区别吧。

在 OAuth 1.0 的时候,它有个 “很大的愿望” 就是想用一套授权机制来应对现实中的所有场景,比如 Web 应用场景、移动 App 应用场景、官方应用场景等等,但是这些场景并不是完全相同的。比如官方应用场景,你说还需要让用户来授权吗?如果需要,始终使用一套授权机制给用户带来的体验,是好还是坏呢?

到了 OAuth 2.0 的时候,就解决了 OAuth 1.0 面临的这种 “尴尬”。OAuth 2.0 不再局限于一种授权机制,它扩充了授权许可机制类型,有了授权码许可机制、客户端凭据机制、资源拥有者凭据机制和隐式许可机制。这样的 OAuth 机制就能够很灵活地适应现实中的各种场景,比如移动应用的场景、官方应用的场景,等等。

此外,OAuth 1.0 的弊端还包括安全上的固化攻击等问题,因此 OAuth 1.0 现在已经是废弃状态了。对于我们来讲,直接使用 OAuth 2.0 就可以了。

# 为什么会有这门课?

但其实呢,OAuth 2.0 并不是一门新的技术,从 2007 年 OAuth 1.0 面世,到 2011 年发布 OAuth 2.0 草案,互联网上已经有很多关于 OAuth 的资料了。所以,在我初次接触 OAuth 2.0 去查阅这些零散的资料时,觉得 OAuth 2.0 很简单啊,不就是授权吗,看两篇文章就够了啊。

但是,看似简单的 OAuth 2.0 却又让我望而却步,在如何使用授权码流程上踌躇不前。比如,在 Web 应用中到底应该怎么使用授权码流程,移动 App 中还能使用授权码流程吗?当我带着这些问题尝试到网上搜索资料时,那些不成体系的资料着实也让我走了不少弯路。不知道你是不是也被下面问题困扰着:

  • 我要开发一个 Web 应用,当使用 OAuth 2.0 的时候,担心授权码被拦截,却因为没有较好的解决方法而一筹莫展。
  • 我要开发一款移动 App,当使用 OAuth 2.0 的时候,在确定是否需要 Server 端上,花费了大把的时间。

后来我看到《OAuth 2 in Action》这本书,如获至宝。它非常系统地讲解了 OAuth2.0,让我对这个协议框架有了更全面、深刻的认识。也正是这本书给了我足够的勇气,让我能够把自己这些年在开放平台的工作中,所掌握的 OAuth 知识体系梳理一遍。也是在这一刻,我才意识到只要有了方向,就有了厚度。

当我开始试着整理出自己这些年掌握的 OAuth 2.0 相关技术、实践,并计划输出的时候,我真真切切地发现,OAuth 2.0 是讲授权没错,但要用对、用好这个协议,绝不是短短两篇文章就能讲清楚的。这也是我做这门课的初衷。

我要结合自己在开放平台上的工作经验以及对 OAuth 2.0 的理解,一次性地给你说透授权这件事儿。同时,我还查阅了诸多资料,包括 OAuth 2 协议规范 (opens new window)、OpenID Connect explained (opens new window) 等,力求给你带来最贴近本质的 OAuth 2.0 知识的讲解。

# 这门课是怎么设计的?

在这门课程里,我会分为基础篇和进阶篇两大模块,每个模块都会安排一些实践内容,和你讲清楚 OAuth 2.0。接下来,我就和你解释下为什么要这么安排。

第一部分是基础篇,就是你必须要掌握的 OAuth 2.0 的基础知识。在这一模块中,我会和你细致地讲解授权码许可(Authorization Code)类型的流程,包括 OAuth 2.0 内部组件之间的通信方式,以及授权服务、客户端(第三方软件)、受保护资源服务这三个组件的原理。

在此基础上,我还会为你讲解其他三种常见许可类型,分别是资源拥有者凭据许可(Resource Owner Password Credentials)、隐式许可(Implicit)、客户端凭据许可(Client Credentials)的原理,以及如何选择适合自己实际场景的授权类型。这样一来,你就能掌握整个 OAuth 2.0 中所有许可类型的运转机制了,并且能够从容地在实际工作环境中使用它们。

为了能够把你带入到 OAuth 2.0 的场景中,方便你理解这些概念、流程,我在讲述这些基础内容的时候,会用一个小明使用第三方 “小兔打单软件” 来打印自己在京东店铺的订单数据的例子,来贯穿始终。

我可以告诉你的是,学完基础篇的内容,你就可以把 OAuth 2.0 用到实际的工作场景了。

第二部分进阶篇的内容,我会侧重讲一些 OAuth 2.0 “更高级” 的用法,可以让你知道如何更安全地用、扩展地用 OAuth 2.0。

所以,这部分内容会包括如何在移动 App 中使用 OAuth 2.0,因使用不当而导致的 OAuth 2.0 安全漏洞有哪些,以及如何利用 OAuth 2.0 实现一个 OpenID Connect 用户身份认证协议。此外,我还邀请了微服务技术领域的专家杨波老师,给我们分享了一个架构案例,基于 OAuth 2.0/JWT 的微服务参考架构。

最后,为了配合课程的学习,不让理论过于枯燥,也为了学以致用,我在 GitHub (opens new window) 上为你准备了一份非常简单、可落地的通过 Java 语言来实现的代码。

简单的地方在于,代码中除了基本的 Servlet 技术外,我没有引入任何其它的第三方内容。所以,你只要能够理解 Request 和 Response,就能够理解这份代码。

可落地的地方在于,虽然它是一份简单的代码,但它不仅把整个 OAuth 2.0 的组件都跑通了,还包含了实践一个 OIDC 协议的具体实现。当然,我在代码里面还预留了一些 TODO 的地方,你可以结合上下文来自行实践处理。这是一项开源的工程。

在这里,我总结了 OAuth 2.0 的知识体系图,你也可以先了解下整个课程的知识结构。

这样一来,你学完这门课后,便能在互联网的授权领域练就一双 “火眼金睛”,可以发现所有使用过 OAuth 2.0 的痕迹,诸如微信登录的场景。这样,即使你不用抓包分析,也能够洞悉它背后的原理,为今后快速熟知互联网的类似场景打下基础。

最后,我还想正式认识一下你。你可以在留言区里做个自我介绍,和我聊聊,你目前学习、使用 OAuth 2.0 的难点、痛点是什么?或者,你也可以聊聊你对 OAuth 2.0、对授权还有哪些独特的思考和体验,欢迎在留言区和我交流讨论。

好了,现在就开启我们的 OAuth 2.0 之旅吧。

#专栏#OAuth 2.0
上次更新: 2025/04/12, 05:37:39
结束语-点线网面,一起构建MySQL知识网络
OAuth 2.0 是要通过什么方式解决什么问题

← 结束语-点线网面,一起构建MySQL知识网络 OAuth 2.0 是要通过什么方式解决什么问题→

最近更新
01
Reactor 核心
02-24
02
前置条件
10-30
03
计算机网络
09-13
更多文章>
Theme by Vdoing | Copyright © 2019-2025 powered by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式