Consent 确认

在授权请求期间,如果身份服务器需要用户同意,浏览器将被重定向到同意页面。也就是说,确认也算是IdentityServer中的一个动作。确认这个词直接翻译过来有一些古怪,既然大家都知道Consent就是确认的意思,下文都以Consent来指代确认。

Consent被用来允许终端用户将一些资源(例如identity 和 API)的访问权限授予客户端。这通常适用于一些第三方应用,并且可以在 client settings中对每个客户端进行这方面的设置。

Consent Page 确认页面

为了实现这个功能,必须在宿主程序上面提供一个确认页面, quickstart UI(identityerServer4提供的一个demo)有一个关于确认页面的基本实现。

一个确认页面通常来说会渲染如下信息:

  1. 当前用户的名称(displayname)
  2. 发出请求的客户端的名称(displayname)
  3. 客户端的logo
  4. 关于客户端更多信息的一个链接(link)
  5. 客户端想要请求的资源列表

此外,还有一些比如说允许用户点击“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)的更多相关文章

  1. 【ASP.NET Core分布式项目实战】(三)整理IdentityServer4 MVC授权、Consent功能实现

    本博客根据http://video.jessetalk.cn/my/course/5视频整理(内容可能会有部分,推荐看源视频学习) 前言 由于之前的博客都是基于其他的博客进行开发,现在重新整理一下方便 ...

  2. 第28章 确认(Consent) - Identity Server 4 中文文档(v1.0.0)

    在授权请求期间,如果IdentityServer需要用户同意,则浏览器将被重定向到同意页面. 同意用于允许最终用户授予客户端对资源(身份或API)的访问权限.这通常仅对第三方客户端是必需的,并且可以在 ...

  3. [Spark][kafka]kafka 的topic 创建和删除试验

    kafka 的topic 创建和删除试验 zookeeper和kafka 的安装,参考: http://www.cnblogs.com/caoguo/p/5958608.html 参考上述URL后,在 ...

  4. Identity Server 4 中文文档(v1.0.0) 目录

    欢迎来到IdentityServer4 第一部分 简介 第1章 背景 第2章 术语 第3章 支持和规范 第4章 打包和构建 第5章 支持和咨询选项 第6章 演示服务器和测试 第7章 贡献 第二部分 快 ...

  5. Lotus分析

    一 Lotus的任务 Lotus是一个消息通知服务,topic和subscription是多对多的关系.后面我加了一个发送自定义邮件和自定义短信的功能. 产品里面有个监控报警和通知列表.监控报警里创建 ...

  6. 【运维技术】从零开始搭建开发使用的Kafka环境

    [原创]从零开始搭建开发使用的Kafka环境 入门资料 百度百科: Kafka是一种高吞吐量的分布式发布订阅消息系统,这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决. 对于像Hadoop ...

  7. Flume+Kafka收集Docker容器内分布式日志应用实践

    1 背景和问题 随着云计算.PaaS平台的普及,虚拟化.容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端.通常,我们需要需要获取日志,来进行监控.分析.预测.统计等工作,但是云端 ...

  8. Kafka集群安裝部署(自带Zookeeper)

    kafka简介 kafka官网:http://kafka.apache.org/ kafka下载页面:http://kafka.apache.org/downloads kafka配置快速入门:htt ...

  9. kafka——集群安裝部署(自带zookeeper)

    kafka系列文章 第一章 linux单机安装kafka 第二章 kafka--集群安裝部署(自带zookeeper) 一.kafka简介 kafka官网:http://kafka.apache.or ...

随机推荐

  1. 异常--finally关键字

    finally定义: finally{}代码块中的代码是一定会执行的,一般用来关闭资源或者一些必须执行的代码,如数据库连接的关闭

  2. 小程序View内的文字不换行

    今天发现View内的文字一行过去直接被屏幕右边吃掉,没有预期的换行,设置width也不管用,最后用它解决了 1. white-space:pre-line(不会保留空白和tabs) 2. white- ...

  3. Django 中的 日志处理

    日志处理: 上线后必须使用 便于以后的 维护 管理 根据日志 处理 BUG 在 项目中 定义一个 存放日志的 文件夹 log 存放所有 等级 的 日志 配置: 将下面的日志的 配置 写入 django ...

  4. 004_浅析Python的GIL和线程安全

    在这里我们将介绍Python的GIL和线程安全,希望大家能从中理解Python里的GIL,以及GIL的前世今生. 对于Python的GIL和线程安全很多人不是很了解,通过本文,希望能让大家对Pytho ...

  5. Linux之RTOS学习

    Linux之RTOS学习 RTOS: Real time operating system 系统选型 可选方案 RTLinux - FSMLabs, WindRiver Systems - http: ...

  6. day07----字符编码解码、文件操作(1)

    字符编码: 什么是字符编码? 字符编码是将人识别的字符转换成计算机能识别的二进制字符(01),转换的规则就是编码表. 人能识别的字符串  与  计算机能识别的二进制字符 两者之间对应关系构成的结构称为 ...

  7. leetcode 74. Search a 2D Matrix 、240. Search a 2D Matrix II

    74. Search a 2D Matrix 整个二维数组是有序排列的,可以把这个想象成一个有序的一维数组,然后用二分找中间值就好了. 这个时候需要将全部的长度转换为相应的坐标,/col获得x坐标,% ...

  8. 初学Python——线程

    什么是线程? 线程是进程内的独立的运行线路,是操作系统能够进行运算调度的最小单位,同时也是处理器调度的最小单位.线程被包含在进程之内,是进程中实际运作单位. 一个线程指的是进程中的一个单一顺序的控制流 ...

  9. GOjs版本2.0去除水印

    在go.js找到:"7eba17a4ca3b1a8346" 找到这个关键字,将: 改成:a.br=function(){return true}即可.

  10. 外部python脚本调用django 手动清理session

    调试orm 在django项目根目录下创建文件test_orm.py,它和manage.py是同级的 import os if __name__ == "__main__": # ...