专栏首页JAVA杂谈OAuth2.0最简向导(多图预警)

OAuth2.0最简向导(多图预警)

OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。 这个标准比较抽象,使用了很多术语,初学者不容易理解。本文从最小数据单元开始一步一步揭开OAuth 2.0的神秘面纱,希望大家看完本文都能知道OAuth 2.0到底是个什么。参考川崎高彦在medium上的文章。

首先,得有一些用户的数据。

然后,我们需要一个服务器来管理这些用户的数据,我们称之为“资源服务器

这时候有个第三方应用想要访问用户的数据,我们把这第三方应用称之为“客户应用

这时候我们给资源服务器按个门暴露用户数据,这个门我们称之为“API

客户应用可以通过API访问用户的数据,资源服务器负责返回用户数据。

这时候来了个恶意的客户应用,它也想要获取用户数据拿去获利。由于我们没给API加上权限校验,所以恶意的客户应用也可以获取用户数据

我们迫切需要一种机制来保护用户数据,业界实践是提前给客户应用颁发一个Access Token,它表示客户应用被授权可以访问用户数据。

客户应用请求资源服务器获取用户数据时,在请求里带上Access Token 参数,资源服务器取出请求中的Access Token并校验Access Token确认客户应用有访问用户数据的权限 。

校验通过后资源服务器返回用户数据

由于该机制工作的前提是:必须提前给客户应用颁发Access Token,所以这时候我们又需要一个颁发Access Token的角色,我们把这个负责颁发Access Token的角色称之为授权服务器

暂停一下,我们来看看黑板

  • 授权服务器负责生成Access Token, 并将Access Token 颁发给客户应用
  • 客户应用带上Access Token 去访问用户数据
  • 资源服务器负责从请求里取出AccessToken,校验Access Token是否具有访问用户的权限,如果有则返回客户数据。

客户应用、授权服务器、资源服务器之间的关系如下

上面流程中第一步是授权服务器生成Access Token ,在真实流程中,在颁发Token给客户应用之前需要先征询用户的同意,必须要用户同意授权才会给客户应用颁发Access Token。客户应用、授权服务、用户三者之间的交互流程如下:

  1. 客户应用请求授权服务器获取Access Token
  2. 授权服务器咨询用户意见
  3. 用户同意授权
  4. 授权服务器颁发Access Token 给 客户应用

file

OAuth 2.0标准化了Access Token的请求和响应部分,OAuth2.0的细节在RFC 6749(OAuth 2.0授权框架)中描述。 参考网站:http://www.rfcreader.com/#rfc6749

本文分享自微信公众号 - JAVA日知录(java_daily),作者:单一色调

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Prometheus监控MySQL性能指标

    这里使用--web.listen-address=":9200"修改默认启动端口,防止跟上文中启动的服务器监控冲突。

    JAVA日知录
  • 架构师之路一-架构师入门指引

    导读:本系列文章教你怎么样成为一名架构师,而本篇文章则带你先认识一下什么是架构师,架构师的工作是什么?

    JAVA日知录
  • 数据库优化 - SQL优化

    前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行...

    JAVA日知录
  • PHP数据结构(二十二) ——快速排序

    PHP数据结构(二十二)——快速排序 (原创内容,转载请注明来源,谢谢) 一、概述 前面的插入排序,都是以移动的方式进行排序。快速排序,则是以交换的方式进行...

    用户1327360
  • 不改变比特币, 如何扩容?

    在过去的十年中,对于行业论坛和从业媒体来说,扩容一直是永恒的主题。在这篇文章中,我将假设过去十年中一直被人们谈论的扩容方案,都没有命中要害,我将提出另一种框架。...

    区块链大本营
  • Python爬虫之urllib库—进阶篇

    urllib库除了一些基础的用法外,还有很多高级的功能,可以更加灵活的适用在爬虫应用中,比如,用HTTP的POST请求方法向服务器提交数据实现用户登录、当服务器...

    企鹅号小编
  • 号称能自动编程60年,“进化计算”究竟进化到哪一步了?

    与其辛苦研究计算机解决问题的方法论,敲出精准的代码,不如告诉计算机你想要什么,让它自己运行算法去解决你的需求。

    大数据文摘
  • 统计学习方法:概述

    统计学习是机器学习中的一个重要分支。它是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测分析的一门学科。它是以计算机及网络为平台,以数据为研究对象的学...

    统计学家
  • 就像电子邮件,比特币将是未来全球信息传输的基本工具

    比特币是一个协议。在不久的将来,我们将在不了解比特币的运行原理的情况下使用比特币协议来向对方发送资金。而解释比特币和区块链技术会像如今解释电子邮件的技术一样没有...

    新智元
  • 2018-11-28 最常用的Intellij IDEA快捷键

    除了上面的快捷键之外,还有非常多有用的快捷键,几乎每一个在Intellij中的操作都有一个等同的快捷键。 我们很难一下全部学习到位,需要一定的时间和练习。 我每...

    Albert陈凯

扫码关注云+社区

领取腾讯云代金券