`
wx1568905209
  • 浏览: 25200 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

auth2.0概念理解

 
阅读更多

OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。

这个标准比较抽象,使用了很多术语,初学者不容易理解。其实说起来并不复杂,下面我就通过一个简单的类比,帮助大家轻松理解,OAuth 2.0 到底是什么。

我住在一个大型的居民小区。

bg2019040401.jpg

小区有门禁系统。

bg2019040402.jpg

进入的时候需要输入密码。

 

我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。bg2019040403.jpg

我经常网购和外卖,每天都有快递员来送货。我必须找到一个办法,让快递员通过门禁系统,进入小区。

bg2019040404.jpg

如果我把自己的密码,告诉快递员,他就拥有了与我同样的权限,这样好像不太合适。万一我想取消他进入小区的权力,也很麻烦,我自己的密码也得跟着改了,还得通知其他的快递员。

有没有一种办法,让快递员能够自由进入小区,又不必知道小区居民的密码,而且他的唯一权限就是送货,其他需要密码的场合,他都没有权限?

二、授权机制的设计

于是,我设计了一套授权机制。

第一步,门禁系统的密码输入器下面,增加一个按钮,叫做"获取授权"。快递员需要首先按这个按钮,去申请授权。

第二步,他按下按钮以后,屋主(也就是我)的手机就会跳出对话框:有人正在要求授权。系统还会显示该快递员的姓名、工号和所属的快递公司。

我确认请求属实,就点击按钮,告诉门禁系统,我同意给予他进入小区的授权。

第三步,门禁系统得到我的确认以后,向快递员显示一个进入小区的令牌(access token)。令牌就是类似密码的一串数字,只在短期内(比如七天)有效。

第四步,快递员向门禁系统输入令牌,进入小区。

有人可能会问,为什么不是远程为快递员开门,而要为他单独生成一个令牌?这是因为快递员可能每天都会来送货,第二天他还可以复用这个令牌。另外,有的小区有多重门禁,快递员可以使用同一个令牌通过它们。

三、互联网场景

我们把上面的例子搬到互联网,就是 OAuth 的设计了。

首先,居民小区就是储存用户数据的网络服务。比如,微信储存了我的好友信息,获取这些信息,就必须经过微信的"门禁系统"。

其次,快递员(或者说快递公司)就是第三方应用,想要穿过门禁系统,进入小区。

最后,我就是用户本人,同意授权第三方应用进入小区,获取我的数据。

简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。

四、令牌与密码

令牌(token)与密码(password)的作用是一样的,都可以进入系统,但是有三点差异。

(1)令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。

(2)令牌可以被数据所有者撤销,会立即失效。以上例而言,屋主可以随时取消快递员的令牌。密码一般不允许被他人撤销。

(3)令牌有权限范围(scope),比如只能进小区的二号门。对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。

上面这些设计,保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全。这就是 OAuth 2.0 的优点。

注意,只要知道了令牌,就能进入系统。系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的。这也是为什么令牌的有效期,一般都设置得很短的原因。

OAuth 2.0 对于如何颁发令牌的细节,规定得非常详细。具体来说,一共分成四种授权类型(authorization grant),即四种颁发令牌的方式,适用于不同的互联网场景。

 

转载于:https://my.oschina.net/u/2277392/blog/3073534

分享到:
评论

相关推荐

    SharePoint+OAuth2.0

    SharePoint 是微软提供的一款强大的企业级协作平台,用于构建网站、文档管理、团队协作和工作流程。OAuth2.0 是一个授权框架...通过深入理解这些概念和实践,你可以有效地利用OAuth2.0增强SharePoint的认证和授权功能。

    springboot集成oauth2.0

    在"spring-security-oauth2-example-master"这个项目中,你可以找到一个完整的SpringBoot集成OAuth2.0的示例,包括配置、控制器、服务以及客户端的实现,通过学习和研究该项目,可以更好地理解上述知识点,并实际...

    java实现oauth2.0服务端+客户端(含JWT)

    首先,OAuth 2.0的核心概念包括四个角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器(Resource Server)和授权服务器(Authorization Server)。资源所有者是拥有数据的用户,客户端是请求访问...

    OAuth2.0授权系统实现单点登录

    OAuth2.0的核心概念包括四个主要角色:资源所有者(Resource Owner)、客户端(Client)、授权服务器(Authorization Server)和资源服务器(Resource Server)。资源所有者是拥有数据的用户,客户端是需要访问这些...

    阮一峰_理解OAuth 2.01

    在这篇文章中,阮一峰以云冲印服务为例,详细阐述了OAuth 2.0 的应用场景、基本概念和工作流程,对于理解和实施OAuth 2.0 提供了清晰的指南。了解并掌握OAuth 2.0 对于开发需要用户授权的应用程序至关重要,因为它能...

    使用Springboot搭建OAuth2.0 Server的方法示例

    使用 Springboot 搭建 OAuth2.0 Server 需要了解 OAuth2.0 的设计思路和运行流程,熟悉 Spring Boot 和 Spring Security 的基本概念,掌握 pom.xml 文件的管理依赖关系,并编写实现授权服务提供方的逻辑。

    Auth2+spring

    标题 "Auth2+spring" 指涉的是OAuth2(开放授权2.0)与Spring Security的集成,用于实现单点登录(Single Sign-On, SSO)系统。OAuth2是一种授权框架,允许第三方应用在用户许可的情况下访问其存储在特定服务提供者...

    oauth2.0鉴权

    ### OAuth 2.0 鉴权机制详解 #### 一、引言 OAuth 2.0 是一种广泛应用于互联网的授权协议标准,主要用于客户端应用...通过正确理解和实施OAuth 2.0的相关流程和技术细节,可以极大地提高应用程序的安全性和用户体验。

    Gerrit.jar Github OAuth2.0 源码

    OAuth2.0的核心概念包括四个角色:资源所有者、客户端、授权服务器和资源服务器。资源所有者是拥有数据的用户,客户端是需要访问这些数据的应用(如Gerrit),授权服务器负责验证资源所有者的身份并颁发访问令牌,...

    Django Book 2.0 中文版

    1. **中间件概念**:理解中间件的作用,掌握如何编写自定义中间件。 2. **常用中间件**:了解Django内置的一些中间件,如日志记录、错误处理等。 #### 十六、集成已有数据库与应用 1. **现有数据库迁移**:学习...

    PyPI 官网下载 | dash_auth-0.1.0.tar.gz

    关于标签中提到的“zookeeper”、“分布式”和“云原生”,虽然“dash_auth”库本身并未直接涉及这些概念,但它们与Python库的使用场景紧密相关。Zookeeper是一个分布式协调服务,常用于管理分布式系统中的配置信息...

    Go编程语言的OAuth2.0服务器库。_Go_HTML_下载.zip

    **OAuth2.0基本概念** OAuth2.0协议允许用户将特定资源的访问权限授予第三方应用,同时保持用户的用户名和密码安全。该协议定义了四个主要角色:资源所有者(Resource Owner)、客户端(Client)、资源服务器...

    poe-auth:生产就绪的 OAuth 2.0 服务器

    首先,我们要理解 OAuth 2.0 的核心概念。OAuth 2.0 提供了四种授权类型:授权码(Authorization Code)、隐式(Implicit)、客户端凭据(Client Credentials)和密码(Resource Owner Password Credentials)模式。...

    struts2.0最新实例3

    本实例"struts2.0最新实例3"旨在通过具体的实践案例,帮助你深入理解和掌握Struts2.0的核心特性和用法。 1. **Struts2框架概述**:Struts2是Apache软件基金会的开源项目,它是Struts1.x的升级版,吸收了WebWork框架...

    JSF2.0 Tutorial

    本教程将深入探讨JSF 2.0的核心概念、新特性以及如何实际应用。 **1. JSF 2.0基础** JSF 2.0是基于组件的框架,它提供了一系列预先定义的UI组件,如按钮、表单、文本框等,开发者可以通过声明式方式在页面上使用...

    mobilecloud_bluelist-auth-master.

    首先,我们要理解云空间的基本概念。云空间是指基于云计算技术,通过互联网提供的一种存储服务。用户可以随时随地访问存储在云端的数据,而无需依赖本地设备的存储空间。"mobilecloud_bluelist-auth-master"项目的...

    前端开源库-solid-auth-client

    该库的设计理念是简化身份验证流程,使得开发者无需深入理解OAuth 2.0或WebID-TLS等复杂的认证协议。它将这些复杂性隐藏在幕后,提供易于使用的API,使开发者可以专注于构建功能丰富的Web应用,而不用担心底层的身份...

    Apache2.0中文手册(chm格式)

    这份Apache2.0中文手册是为帮助用户理解并配置Apache服务器而编写的,包含了大量的技术细节和操作指南。 1. **Apache2.0安装与配置**: - 安装过程涉及下载源代码、编译和安装。在Linux环境下,通常使用`./...

    The Django Book 2.0中文译本

    根据提供的信息,《Django Book 2.0中文译本》是一本全面介绍Django Web框架的书籍,旨在帮助读者深入理解和高效使用Django框架。以下是对各章节涉及的知识点的详细解析: ### 第一章:介绍Django - **Django概述**...

    Java_开源替代Auth0 Firebase authth AWS Cognito.zip

    理解OIDC的概念、流程(如Authorization Code Flow)以及如何在Java环境中实现OIDC服务器和客户端非常重要。 2. **JWT (JSON Web Tokens)**:在身份验证中,JWT常被用作安全地传递用户信息的令牌。Java中可以使用如...

Global site tag (gtag.js) - Google Analytics