OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。
这个标准比较抽象,使用了很多术语,初学者不容易理解。其实说起来并不复杂,下面我就通过一个简单的类比,帮助大家轻松理解,OAuth 2.0 到底是什么。
我住在一个大型的居民小区。
小区有门禁系统。
进入的时候需要输入密码。
我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。
我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。
如果我把自己的密码,告诉快递员,他就拥有了与我同样的权限,这样好像不太合适。万一我想取消他进入小区的权力,也很麻烦,我自己的密码也得跟着改了,还得通知其他的快递员。
有没有一种办法,让快递员能够自由进入小区,又不必知道小区居民的密码,而且他的唯一权限就是送货,其他需要密码的场合,他都没有权限?
二、授权机制的设计
于是,我设计了一套授权机制。
第一步,门禁系统的密码输入器下面,增加一个按钮,叫做"获取授权"。快递员需要首先按这个按钮,去申请授权。
第二步,他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。
我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。
第三步,门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。
第四步,快递员向门禁系统输入令牌,进入小区。
有人可能会问,为什么不是远程为快递员开门,而要为他单独生成一个令牌?这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。
三、互联网场景
我们把上面的例子搬到互联网,就是 OAuth 的设计了。
首先,居民小区就是储存用户数据的网络服务。比如,微信储存了我的好友信息,获取这些信息,就必须经过微信的"门禁系统"。
其次,快递员(或者说快递公司)就是第三方应用,想要穿过门禁系统,进入小区。
最后,我就是用户本人,同意授权第三方应用进入小区,获取我的数据。
简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。
四、令牌与密码
令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。
(1)令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。
(2)令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。
(3)令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。
上面这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。
注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。这也是为什么令牌的有效期,一般都设置得很短的原因。
OAuth 2.0 对于如何颁发令牌的细节,规定得非常详细。具体来说,一共分成四种授权类型(authorization grant),即四种颁发令牌的方式,适用于不同的互联网场景。
相关推荐
SharePoint 是微软提供的一款强大的企业级协作平台,用于构建网站、文档管理、团队协作和工作流程。OAuth2.0 是一个授权框架...通过深入理解这些概念和实践,你可以有效地利用OAuth2.0增强SharePoint的认证和授权功能。
在"spring-security-oauth2-example-master"这个项目中,你可以找到一个完整的SpringBoot集成OAuth2.0的示例,包括配置、控制器、服务以及客户端的实现,通过学习和研究该项目,可以更好地理解上述知识点,并实际...
首先,OAuth 2.0的核心概念包括四个角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器(Resource Server)和授权服务器(Authorization Server)。资源所有者是拥有数据的用户,客户端是请求访问...
OAuth2.0的核心概念包括四个主要角色:资源所有者(Resource Owner)、客户端(Client)、授权服务器(Authorization Server)和资源服务器(Resource Server)。资源所有者是拥有数据的用户,客户端是需要访问这些...
在这篇文章中,阮一峰以云冲印服务为例,详细阐述了OAuth 2.0 的应用场景、基本概念和工作流程,对于理解和实施OAuth 2.0 提供了清晰的指南。了解并掌握OAuth 2.0 对于开发需要用户授权的应用程序至关重要,因为它能...
使用 Springboot 搭建 OAuth2.0 Server 需要了解 OAuth2.0 的设计思路和运行流程,熟悉 Spring Boot 和 Spring Security 的基本概念,掌握 pom.xml 文件的管理依赖关系,并编写实现授权服务提供方的逻辑。
标题 "Auth2+spring" 指涉的是OAuth2(开放授权2.0)与Spring Security的集成,用于实现单点登录(Single Sign-On, SSO)系统。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其存储在特定服务提供者...
### OAuth 2.0 鉴权机制详解 #### 一、引言 OAuth 2.0 是一种广泛应用于互联网的授权协议标准,主要用于客户端应用...通过正确理解和实施OAuth 2.0的相关流程和技术细节,可以极大地提高应用程序的安全性和用户体验。
OAuth2.0的核心概念包括四个角色:资源所有者、客户端、授权服务器和资源服务器。资源所有者是拥有数据的用户,客户端是需要访问这些数据的应用(如Gerrit),授权服务器负责验证资源所有者的身份并颁发访问令牌,...
1. **中间件概念**:理解中间件的作用,掌握如何编写自定义中间件。 2. **常用中间件**:了解Django内置的一些中间件,如日志记录、错误处理等。 #### 十六、集成已有数据库与应用 1. **现有数据库迁移**:学习...
关于标签中提到的“zookeeper”、“分布式”和“云原生”,虽然“dash_auth”库本身并未直接涉及这些概念,但它们与Python库的使用场景紧密相关。Zookeeper是一个分布式协调服务,常用于管理分布式系统中的配置信息...
**OAuth2.0基本概念** OAuth2.0协议允许用户将特定资源的访问权限授予第三方应用,同时保持用户的用户名和密码安全。该协议定义了四个主要角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器...
首先,我们要理解 OAuth 2.0 的核心概念。OAuth 2.0 提供了四种授权类型:授权码(Authorization Code)、隐式(Implicit)、客户端凭据(Client Credentials)和密码(Resource Owner Password Credentials)模式。...
本实例"struts2.0最新实例3"旨在通过具体的实践案例,帮助你深入理解和掌握Struts2.0的核心特性和用法。 1. **Struts2框架概述**:Struts2是Apache软件基金会的开源项目,它是Struts1.x的升级版,吸收了WebWork框架...
本教程将深入探讨JSF 2.0的核心概念、新特性以及如何实际应用。 **1. JSF 2.0基础** JSF 2.0是基于组件的框架,它提供了一系列预先定义的UI组件,如按钮、表单、文本框等,开发者可以通过声明式方式在页面上使用...
首先,我们要理解云空间的基本概念。云空间是指基于云计算技术,通过互联网提供的一种存储服务。用户可以随时随地访问存储在云端的数据,而无需依赖本地设备的存储空间。"mobilecloud_bluelist-auth-master"项目的...
该库的设计理念是简化身份验证流程,使得开发者无需深入理解OAuth 2.0或WebID-TLS等复杂的认证协议。它将这些复杂性隐藏在幕后,提供易于使用的API,使开发者可以专注于构建功能丰富的Web应用,而不用担心底层的身份...
这份Apache2.0中文手册是为帮助用户理解并配置Apache服务器而编写的,包含了大量的技术细节和操作指南。 1. **Apache2.0安装与配置**: - 安装过程涉及下载源代码、编译和安装。在Linux环境下,通常使用`./...
根据提供的信息,《Django Book 2.0中文译本》是一本全面介绍Django Web框架的书籍,旨在帮助读者深入理解和高效使用Django框架。以下是对各章节涉及的知识点的详细解析: ### 第一章:介绍Django - **Django概述**...
理解OIDC的概念、流程(如Authorization Code Flow)以及如何在Java环境中实现OIDC服务器和客户端非常重要。 2. **JWT (JSON Web Tokens)**:在身份验证中,JWT常被用作安全地传递用户信息的令牌。Java中可以使用如...