注销IdentityServer与删除身份cookie一样简单,但是我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供程序)中注销。

一.删除身份认证Cookie

要删除身证认证cookie,只需在HttpContext的扩展方法SignOutAsync即可。你需要传递一个值IdentityServerConstants.DefaultCookieAuthenticationScheme ,如果你修改了他,那么使用你自定义的值。

await HttpContext.SignOutAsync(IdentityServerConstants.DefaultCookieAuthenticationScheme);

或者

await HttpContext.SignOutAsync();

通常,你应该提示用户注销(意思是需要POST方式提交注销请求),否则攻击者可能会热链接到你的注销页面(GET方式),导致用户被自动注销。

二.通知客户端已被注销的用户信息

作为注销过程的一部分,你需要确保向客户端通知用户已注销。IdentityServer支持服务器应用程序(MVC Client)的 front-channelback-channel,以及基于浏览器的JavaScript客户端(例如SPA,React,Angular等)的session management

Front-channel

要通过 Front-channel 从服务器端应用程序注销用户,IdentityServer中的“注销”页面必须呈现&lt;iframe&gt;以通知客户端用户已注销。希望被通知的客户端必须设置 FrontChannelLogoutUri 的值。IdentityServer 跟踪用户登录的客户端,并在IIdentityServerInteractionService 上提供名为GetLogoutContextAsync的API。该API返回一个带有SignOutIFrameUrl属性的LogoutRequest对象,所以你注销的页面必须呈现为\<iframe\>

Back-channel

通过 Back-channel 来注销用户,IdentityServer中的SignOutIFrameUrl端点将自动触发Server到Server的调用,将签名注销请求传递给客户端。这意味着即使没有 Front-channel ,IdentityServer中的“注销”页面仍然必须呈现一个<iframe>到SignOutFrameUrl,希望收到通知的客户端必须设置BackChannelLogoutUri配置值

基于浏览器的JavaScript客户端

参考 session management 的设计规范,IdentityServer中没有什么特别的,您需要通知这些客户端用户已经退出。 但是,客户端必须对check_session_iframe执行监视,并且这由 oidc-client JavaScript库实现。

三.由客户端应用程序发起的注销

如果注销是由客户端应用程序启动的,则客户端首先将用户重定向到最终会话端点。 在会话结束端点进行处理可能需要通过重定向到注销页面来维护一些临时状态(例如,客户端的注销,注销重定向uri)。 该状态可能对注销页面有用,并且状态的标识符通过logoutId参数传递到注销页面。

交互服务上的GetLogoutContextAsync API可用于加载状态。感兴趣的是ShowSignoutPrompt,它指示注销请求是否已通过身份验证,因此不会提示用户注销。

默认情况下,此状态作为通过logoutId值传递的受保护数据结构进行管理。 如果你希望在会话终端和注销页面之间使用其他持久性,则可以实现IMessageStore <LogoutMessage>并在DI中注册实现。

IdentityServer Topics(7)- 注销的更多相关文章

  1. IdentityServer Topics(4)- 登录

    为了使IdentityServer代表用户发布令牌,该用户必须登录到IdentityServer. Cookie认证 使用来自ASP.NET Core的cookie身份验证处理程序管理的cookie跟 ...

  2. IdentityServer Topics(1)- 启动说明

    启动 IdentityServer的启动是中间件和服务的组合来实现的. 所有配置都在你的启动类(Startup.cs)中完成. 配置服务 通过以下方式调用将IdentityServer服务添加到DI系 ...

  3. IdentityServer Topics(3)- 定义客户端

    客户端代表可以从您的身份服务器请求令牌的应用程序. 细节有所不同,但您通常为客户端定义以下常用设置: 一个唯一的客户端ID 一个密钥,如果需要 允许与令牌服务的交互(称为授权类型) 身份或访问令牌被发 ...

  4. IdentityServer Topics(5)- 使用第三方登录

    ASP.NET Core有一个灵活的方式来处理外部认证. 这包括几个步骤. 如果您使用的是ASP.NET Identity,则许多底层技术细节对您而言都是隐藏的. 建议您还阅读Microsoft文档并 ...

  5. IdentityServer Topics(6)- Windows身份验证

    在支持的平台上,您可以让IdentityServer使用Windows身份验证(例如,对Active Directory)对用户进行身份验证. 当您使用以下身份托管IdentityServer时,当前 ...

  6. IdentityServer Topics(2)- 定义资源

    您通常在系统设计中的第一件事就是您要保护的资源. 这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 您可以使用C#对象模型定义资源(硬编码),或从数据存储中加载它们. IRes ...

  7. 第26章 联合注销 - Identity Server 4 中文文档(v1.0.0)

    联合注销是指用户使用外部身份提供程序登录IdentityServer,然后用户通过IdentityServer未知的工作流程注销该外部身份提供程序的情况.当用户注销时,对IdentityServer进 ...

  8. IdentityServer4-主题

    一.Startup 二.定义Resources 三.定义Clients 四.登录 五.使用外部身份提供商登录 六.Windows身份验证 七.登出 八.注销外部身份提供商 九.联合注销 十.联合网关 ...

  9. 【总】IdentityServer4 32篇汇总

    随笔分类 - IdentityServer4 IdentityServer4 常见问题 - 用户拒绝授权后报错 摘要: 1.问题说明 在 IdentityServer4 Web 授权中,一般会有一个显 ...

随机推荐

  1. 使用python将数据写入excel

    先来个简单的例子: #!/usr/bin/python #coding=utf-8 # ======================================================== ...

  2. Mysql学习笔记03

    Mysql 的视图 1  view  在查询中,我们经常把查询结果当成临时表来看, view 是什么? View 可以看成一张虚拟的表,是表通过某种运算得到的有一个投影. 2 如何创建视图? 创建视图 ...

  3. json转化技巧

    如果用户是一级下拉菜单,二级联动,动态加载内容到二级菜单,并在下方内容处,随着用户选择的内容动态加载相应内容. 实现的方法其实很简单 select部分:一级菜单选择内容,ajax动态加载,因为内容固定 ...

  4. ISP PIPLINE (九_2) Denoise 之 time domain denoise

    时域噪声是空域噪声在时间上波动的一种描述. 1.多帧平均去噪法 1.1 理论: 1.2 帧数增加,噪声减小: 1.3 IIR滤波器的效果 2.1中的两种方法在拍摄视频的时候,如果有运动物体,则会出现拖 ...

  5. C语言柔性数组讲解

    #include<stdio.h> typedef struct _SoftArray{ int len; int array[]; }SoftArray; int main() { ; ...

  6. 接口测试——postman & jmeter

    新名词: 自动化测试:写代码帮你测试 接口:是一个抽象的概念,一种交互关系. 抓包:拦截请求. 接口测试:就是功能测试,比后者还简单. 需要有测试文档,包括项目.模块.URL.请求方式.参数.参数说明 ...

  7. 20181125第二章节总结part3

    数据-元祖 元祖的是可存放多个值,不可变,有顺序的,从左向右编号. 作用是可以用来存储一些不可以更改的配置文件 基本 语法: #创建新元祖 tuple = (,,,,,) #索引,写法同list tu ...

  8. JS的常用属性

    JS-------定义:基于事件和对象驱动,并具有安全性能的脚本语言. 引入:<script  type=”text/javascript”>具体js代码</script>   ...

  9. PyQt4转换ui为py文件需添加如下代码才可执行

    1)转换ui为py 命令行进入ui文件所在文件夹,输入pyuic4 ui_name.ui > py_name.py即可 或新建ui2py.bat文件,写入: @echo off @cd /d & ...

  10. pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)

    数据介绍 先随机生成一组数据: import pandas as pd import numpy as np state = ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'N ...