OAuth2 的概念
OAuth是一个关于授权的开放网络标准,OAuth2是其2.0版本。
它规定了四种操作流程(授权模式)来确保安全
应用场景有第三方应用的接入、微服务鉴权互信、接入第三方平台、第一方密码登录等
Java王国中Spring Security也对OAuth2标准进行了实现。
OAuth2授权模式
OAuth2定义了四种授权模式(授权流程)来对资源的访问进行控制
无论哪个模式(流程)都拥有三个必要角色:客户端、授权服务器、资源服务器,有的还有用户(资源拥有者),下面简单介绍下授权流程
授权码模式(Authorization Code Grant)
授权码模式是OAuth2目前最安全最复杂的授权流程,先放一张图,稍做解释
如上图,我们可以看到此流程可大致分为三大部分
整体上来说,可以用一句话概括授权码模式授权流程
客户端换取授权码,客户端使用授权码换token,客户端使用token访问资源
接下来对这三部分进行一些说明 :
前提条件:
Client Side
客户端换取授权码
这个客户端可以是浏览器,
Server Side
客户端使用授权码换token
Check Access Token
客户端使用token访问资源
这里的说明省去了一些参数,如scope(请求token的作用域)、state(用于保证请求不被CSRF)、redirect_uri(授权服务器回调uri),先理解概念,实现的时候再去要求
隐式授权模式(Implicit Grant)
隐式授权模式大致可分为两部分:
用一句话概括隐式授权模式授权流程
客户端让用户登录授权服务器换token,客户端使用token访问资源
Client Side
客户端让用户登录授权服务器换token
Check Access Token
客户端使用token访问资源
密码模式(Resource Owner Password Credentials Grant)
密码模式大体上也分为两部分:
一句话概括用户名密码模式流程:
用户在客户端提交账号密码换token,客户端使用token访问资源
Client Side
用户在客户端提交账号密码换token
Check Access Token
客户端使用token访问资源
客户端模式(Client Credentials Grant)
客户端模式大体上分为两部分:
一句话概括客户端模式授权流程:
客户端使用自己的标识换token,客户端使用token访问资源
Server Side
客户端使用自己的标识换token
Check Access Token
客户端使用token访问资源
OAuth2授权模式的选型
考虑到授权场景的多样性,可以参考以下两种选型方式
按授权需要的多端情况
按客户端类型与所有者
后记
学习OAuth2有一段时间了,把学到的知识分享出来,行文中难免有错误,如果发现还请留言指正,谢谢合作
参考文章与资料:
https://time.geekbang.org/course/intro/84 作者:杨波
https://blog.csdn.net/sinat_25295611/article/details/84980987 作者:Kayfen
How OAuth 2.0 works and how to choose the right flow 作者:Lorenzo Spyna
原文出处https://www.cnblogs.com/hellxz/p/oauth2_process.html
到此这篇关于OAuth 2.0 概念及授权流程梳理的文章就介绍到这了,更多相关OAuth2.0 授权流程内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
爱客服简介 爱客服智能客服系统是由中科汇联科技股份有限公司自主研发,专门为中小企业量身定制的全智能、全渠道的云客服平台(以下简称爱客服)。 爱客服以清华、北大、哈工大,三大高校组成的中科汇联人工智能研究院为技术核心;具备精准的语义理解、自然的人机交互、智能的知识梳理等优势;采用机器人+人工坐席+工单+呼叫中心四位一体的服务模式,有效提升客服工作效率、降低管理成本,让企业的价值真正传递给每一位客户。
我们必须在我的客户项目中集成OAuth2.0授权代码授予。目前,该应用程序使用本地登录页面。我们需要删除该页面,并将未登录的用户重定向到AS登录页面,。在AS end成功登录后,我们将被重定向到配置的。此时,我的客户端应用程序将如何知道用户已在AS登录?如何在客户端维护会话?另外,我需要用和访问令牌交换auth代码,并将其用于后续的服务器API调用。那么如何实现这一点并将令牌作为标头发送呢? 应用
主要内容:什么是输入/输出流,输入流,输出流在 Java 中所有数据都是使用流读写的。 流是一组有序的数据序列,将数据从一个地方带到另一个地方。 根据数据流向的不同,可以分为输入(Input)流和输出(Output)流两种。 在学习输入和输出流之前,我们要明白为什么应用程序需要输入和输出流。例如,我们平时用的 Office 软件,对于 Word、Excel 和 PPT 文件,我们需要打开文件并读取这些文本,和编辑输入一些文本,这都需要利用输
概述:概述Istio中的流量管理及其功能。 Pilot:引入Pilot,负责在服务网格中管理Envoy代理的分布式部署的组件。 请求路由:描述在Istio服务网格中服务之间如何路由请求。 发现和负载均衡:描述在网格中的服务实例之间的流量如何负载均衡。 处理故障: Envoy中的故障恢复功能概述,可以被未经修改的应用程序来利用,以提高鲁棒性并防止级联故障。 故障注入: 介绍系统故障注入的概念,可用于
主要内容:1、AOP 基本概念,2、AOP(底层原理),3、AOP(JDK 动态代理),4、AOP(术语),5、AOP操作,6、AOP 操作(AspectJ 注解),7、有多个增强类对同一个方法进行增强,设置增强类优先级,8、AOP 操作(AspectJ 配置文件)1、AOP 基本概念 (1)面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得 业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 (2)通俗描述:不通过修改源代码方式,在主干功能里
通过条件是不是为真来决定是否执行某些代码,或者根据条件是否为真来重复运行一段代码是大部分编程语言的基本组成部分。Rust 代码中最常见的用来控制执行流的结构是 if 表达式和循环。 if 表达式允许根据条件执行不同的代码分支。我们提供一个条件并表示 “如果符合这个条件,运行这段代码。如果条件不满足,不运行这段代码。” 在 projects 目录创建一个叫做 branches 的新项目来学习 if