IdentityServer4【Topic】之确认(Consent)
Consent 确认
在授权请求期间,如果身份服务器需要用户同意,浏览器将被重定向到同意页面。也就是说,确认也算是IdentityServer中的一个动作。确认这个词直接翻译过来有一些古怪,既然大家都知道Consent就是确认的意思,下文都以Consent来指代确认。
Consent被用来允许终端用户将一些资源(例如identity 和 API)的访问权限授予客户端。这通常适用于一些第三方应用,并且可以在 client settings中对每个客户端进行这方面的设置。
Consent Page 确认页面
为了实现这个功能,必须在宿主程序上面提供一个确认页面, quickstart UI(identityerServer4提供的一个demo)有一个关于确认页面的基本实现。
一个确认页面通常来说会渲染如下信息:
- 当前用户的名称(displayname)
- 发出请求的客户端的名称(displayname)
- 客户端的logo
- 关于客户端更多信息的一个链接(link)
- 客户端想要请求的资源列表
此外,还有一些比如说允许用户点击“remembered”按钮以便相同应用下次不用重复这个步骤。
一旦用户做完了他该做的事儿(点击了同意),确认页面必须把这个确认消息通知给identityserver,然后浏览器会被跳转回authorization端点。
Authorization Context上下文
IdentityServer会将一个returnUrl参数(可通过user interaction options配置)传递到一个包含请求参数的确认页面中。这些参数为确认页面提供了上下文,并且这些上下文可以通过 interaction service进行读取。GetAuthorizationContextAsync
方法(在interaction service中定义)会返回一个AuthorizationRequest对象。
关于客户端或资源的其他详细信息可以使用IClientStore和IResourceStore接口获得。
Informing IdentityServer of the consent result通知IdentityServer确认结果
interaction service上的GrantConsentAsync API允许同意页面通知IdentitySeerver的同意结果(也可能是拒绝客户机访问)。
身份服务器将暂时保留确认的结果。这种持久性在默认情况下使用cookie,因为它需要持续足够长的时间才能将结果传递回授权端点。这种临时持久性与“记住我的确认”特性的持久性不同(它是授权端点,它为用户保留“记住我的确认”)。如果你希望在确认页面和授权重定向之间使用其他的持久性,那么你可以实现IMessageStore<ConsentResponse>,并注入DI。
Returning the user to the authorization endpoint将用户重定向到authorization端点
一旦确认页面将确认结果通知给IdentityServer,用户就能被重定向到returnUrl指定的页面上。你的确认页面应该通过检查是否有效来避免open redirected。这个工作是通过interaction service上面的IsValidReturnUrl来做的。或者,如果
GetAuthorizationContextAsync
返回一个不为空的结果,那么你也可以确定returnUrl是有效的。
IdentityServer4【Topic】之确认(Consent)的更多相关文章
- 【ASP.NET Core分布式项目实战】(三)整理IdentityServer4 MVC授权、Consent功能实现
本博客根据http://video.jessetalk.cn/my/course/5视频整理(内容可能会有部分,推荐看源视频学习) 前言 由于之前的博客都是基于其他的博客进行开发,现在重新整理一下方便 ...
- 第28章 确认(Consent) - Identity Server 4 中文文档(v1.0.0)
在授权请求期间,如果IdentityServer需要用户同意,则浏览器将被重定向到同意页面. 同意用于允许最终用户授予客户端对资源(身份或API)的访问权限.这通常仅对第三方客户端是必需的,并且可以在 ...
- [Spark][kafka]kafka 的topic 创建和删除试验
kafka 的topic 创建和删除试验 zookeeper和kafka 的安装,参考: http://www.cnblogs.com/caoguo/p/5958608.html 参考上述URL后,在 ...
- Identity Server 4 中文文档(v1.0.0) 目录
欢迎来到IdentityServer4 第一部分 简介 第1章 背景 第2章 术语 第3章 支持和规范 第4章 打包和构建 第5章 支持和咨询选项 第6章 演示服务器和测试 第7章 贡献 第二部分 快 ...
- Lotus分析
一 Lotus的任务 Lotus是一个消息通知服务,topic和subscription是多对多的关系.后面我加了一个发送自定义邮件和自定义短信的功能. 产品里面有个监控报警和通知列表.监控报警里创建 ...
- 【运维技术】从零开始搭建开发使用的Kafka环境
[原创]从零开始搭建开发使用的Kafka环境 入门资料 百度百科: Kafka是一种高吞吐量的分布式发布订阅消息系统,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop ...
- Flume+Kafka收集Docker容器内分布式日志应用实践
1 背景和问题 随着云计算.PaaS平台的普及,虚拟化.容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端.通常,我们需要需要获取日志,来进行监控.分析.预测.统计等工作,但是云端 ...
- Kafka集群安裝部署(自带Zookeeper)
kafka简介 kafka官网:http://kafka.apache.org/ kafka下载页面:http://kafka.apache.org/downloads kafka配置快速入门:htt ...
- kafka——集群安裝部署(自带zookeeper)
kafka系列文章 第一章 linux单机安装kafka 第二章 kafka--集群安裝部署(自带zookeeper) 一.kafka简介 kafka官网:http://kafka.apache.or ...
随机推荐
- Lingo求解线性规划案例3——混料问题
凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 某糖果厂用原料A.B和C按不向比率混合加工而成甲.乙.丙三种糖果(假设混合加工中不损耗原料).原料A.B.C ...
- ubuntu如何安装 adobe flash player或adobe插件
方法/步骤 第一步当然是打开终端控制器.有很多方法,这里推荐使用快捷键:ctrl+alt+T.快捷又方便. 然后更新源列表,使用如下命令:sudo apt-get update,后面要输入密码. 下面 ...
- margin-left:-20px
对于负的margin值,设置其作用时要和position:absolute;一起使用
- Netty中ByteBuf 的零拷贝
转载:https://www.jianshu.com/p/1d1fa2fe1ed9 此文章已同步发布在我的 segmentfault 专栏. 根据 Wiki 对 Zero-copy 的定义: &quo ...
- Python socket之tftp协议
1. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...
- Y7000安装驱动显卡问题
整体 https://blog.csdn.net/la9881275/article/details/86720752 详细 https://blog.csdn.net/luteresa/articl ...
- GoldenGate OGG-01032 There Is a Problem in Network Communication Error in Writing to Rmt Remote Trail Rmttrail (Doc ID 1446621.1)
GoldenGate OGG-01032 There Is a Problem in Network Communication Error in Writing to Rmt Remote Trai ...
- Springboot实现跨域请求
之所以需要用到跨域请求,目的在于现在的Java项目,几乎基本上都前后端分离,除一些较老的维护项目外(通常是单体或者是maven多模块形式,不过本质上还是将前端放在webapps下). SpringBo ...
- luogu p1652 圆
题目部分 题目描述 给出N个圆,保证任意两个圆都相离,然后给出两个点(x1,y1).(x2,y2),保证均不在某个圆上,要从点(x1,y1)到(x2,y2)画条曲线,问这条曲线最少穿过多少次圆的边界? ...
- Java技术——Java中的static关键字解析
)非静态内部类能够访问外部类的静态和非静态成员,显然一个非静态内部类不能脱离外部类实体被创建,而静态类不能访问外部类的非静态成员,它只能访问外部类的静态成员.这一点和上面static方法的性质类似. ...