在学习其他应用场景前,需要了解几个客户端的授权模式。首先了解下本节使用的几个名词

       Resource Owner:资源拥有者,文中称“user”;

       Client为第三方客户端;

       Authorization server为授权服务器;

       redirection URI:简单理解为取数据的地址;

       User Agent:用户代理,本文中就是指浏览器;

       这里把访问资源服务器简单理解成取数据。


Resource Owner Password Credentials模式

下面以我自己的理解加上对话的形式来简要说明。

User:Client,这是我的redirection URI,user ID和Password,你去帮我拿些数据吧。

Client:好的,没问题!(转向Authorization server)Authorization server,这是user的user ID和Password,我要去拿user需要的数据。

Authorization server:给的user ID和Password正确,给你access token和refresh token,去拿数据吧。


authorization code模式

User:Client,这是我的redirection URI,你去帮我拿些数据吧,但是我不会提供账号密码。

Client:这样啊,那我们找Authorization server吧,让它来当中间人。

Authorization server(很负责任):User,你是要让Client帮你拿数据吗。

User:是啊,这是我的redirection URI。

Authorization server:Client,给你个授权码authorization code,你拿着authorization code和user给你redirection URI给我验证吧。

Client:好,这是authorization code和user给我redirection URI,我要去拿数据了。

Authorization server:可以,验证没问题了,给你个access token和refresh token,你去拿数据吧。


Implicit模式

User:Client,这是我的redirection URI,你去帮我拿些数据吧,但是我不会提供账号密码。

Client:这样啊,那我们还是找Authorization server吧,让它来当中间人。

Authorization server:User,你是要让Client帮你拿数据吗。

User:是啊,这是我的redirection URI。

Authorization server:(浏览器登场)浏览器,这是user的redirection URI和access token的碎片,你来帮他搞吧。

浏览器(很委屈):只给access token的碎片弄不了啊,我还是问redirection URI怎样才能把这些碎片拼完整吧。

redirection URI的老大(资源服务器):给你个网页,里面有方法把access token的碎片拼起来。

浏览器:Client,access token拼好了,你用access token去拿数据吧。

Implicit模式通过user的浏览器成功拿到了access token,相对于authorization code模式,省去了授权码部分。

而密码模式,需要user提供账号和密码进行验证。倘若user的账号密码可以让Client获取到,可以使用密码模式,但要确保Client不被黑了。


Hybrid模式:

Hybrid模式是结合了Implicit模式和authorization code模式。以下是我对Hybrid模式的理解,如有不对的地方,欢迎指正!

User通过身份认证后,ID token和类似授权码authorization code等信息被传输到浏览器,Client通过浏览器获取到authorization code,然后从Authorization server获取到access token和refresh token。


最后说下refresh token

获取到access token后,它是默认有效时间为3600秒/1小时,可以在new Client的AccessTokenLifetime进行设置。一般情况下,access token失效后,用户需要重新授权,Client才能拿到新的access token。但有了refresh token后,Client检测到access token失效后,可直接向Authorization server申请新的access token。当然,refresh token也是有有效期的。

AbsoluteRefreshTokenLifetime的默认有效期为2592000秒/30天。SlidingRefreshTokenLifetime的默认有效期为1296000秒/15天。

refresh token支持hybrid,authorization code,device flow 和 resource owner password flows等模式 。


本节图片转自阮一峰的网络日志:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html

以上是个人对客户端的授权模式的理解,如有不对的地方,欢迎指正

IdentityServer4-客户端的授权模式原理分析(三)的更多相关文章

  1. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(三):创建使用[ClientCredentials客户端凭证]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建 ...

  2. Ribbon使用及其客户端负载均衡实现原理分析

    1.ribbon负载均衡测试 (1)consumer工程添加依赖 <dependency> <groupId>org.springframework.cloud</gro ...

  3. [转载]MVVM模式原理分析及实践

    没有找到很好的MVVM模式介绍文章,简单找了一篇,分享一下.MVVM实现了UI\UE设计师(Expression Blend 4设计界面)和软件工程师的合理分工,在SilverLight.WPF.Wi ...

  4. Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

    一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...

  5. 认证授权:IdentityServer4 - 各种授权模式应用

    前言: 前面介绍了IdentityServer4 的简单应用,本篇将继续讲解IdentityServer4 的各种授权模式使用示例 授权模式: 环境准备 a)调整项目结构如下:   b)调整cz.Id ...

  6. IdentityServer4(客户端授权模式)

    1.新建三个项目 IdentityServer:端口5000 IdentityAPI:端口5001 IdentityClient: 2.在IdentityServer项目中添加IdentityServ ...

  7. IdentityServer4 (1) 客户端授权模式(Client Credentials)

    写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...

  8. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(五):创建使用[Code-授权码]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 本篇将创建使用[Code-授权码]授权模式的客户端,来对受保护的API资源进行访问. 1.接上一篇项目, ...

  9. IdentityServer4入门三:授权模式

    在入门一.入门二我们实现了一个完整的API保护的过程.需要保护的API只需在其Controler上应用[Authorize]特性,来显式指定受保护的资源.而我们实现的这个例子,所应用的模式叫“Clie ...

随机推荐

  1. DotNet生成随机数的一些方法

    在项目开发中,一般都会使用到“随机数”,但是在DotNet中的随机数并非真正的随机数,可在一些情况下生成重复的数字,现在总结一下在项目中生成随机数的方法. 1.随机布尔值: /// <summa ...

  2. Python 开发轻量级爬虫01

    Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...

  3. MongoDB的安装,配置与开机自启动

    关于简介不多说百度去吧少年.. MongoDB详细安装: 1.进入官网,点击DOWNLOAD MONGODB,下载所需要的版本.. 我这里把下载的文件放在d\MongoDB文件夹下,点击下载的官方镜像 ...

  4. mysql表的一对一/一对多/多对多联系

    1.数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多. 2.通过表的关系,来帮助我们怎样建表,建几张表. 一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反 ...

  5. vcastr2.0插件超级简单使用

                Vcastr2.0简单使用 友情提示:1.蓝色文字为必修改内容.2.#字符后面是解释该代码段的主要内容 1. 引用swfobject.js文件 #public/videoplu ...

  6. 一致性哈希(Consistent Hashing)

    前言:对于一致性哈希已经不是罕见概念,在此只是对原有理论概念的一个整理和用自己的理解讲述,希望对新手有些许帮助,利人利己足矣. 1.概念 一致哈希是一种特殊的哈希算法.在使用一致哈希算法后,哈希表槽位 ...

  7. Java中的修饰符

    -----------------------------------------------01----------------------------------------------- 类,方 ...

  8. Spring Boot 入门教程 | 图文讲解

    目录 一.Spring Boot 是什么 二.为什么要使用 Spring Boot 三.快速入门 3.1 创建 Spring Boot 项目 3.2 项目结构 3.3 引入 Web 依赖 3.4 编写 ...

  9. 关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试

    https://blog.csdn.net/LYJ_viviani/article/details/51873961 https://stackoverflow.com/questions/30241 ...

  10. python学习笔记(6)

    第6章 组合数据类型 组合类型的三种表达形式:集合.序列.字典 集合类型及操作 定义:集合是多个元素的无序组合 集合类型与数学中的集合概念一致 集合元素之间无序,每个元素唯一,不存在相同元素 集合元素 ...