注销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. Laravel修改验证提示信息为中文

    1.覆盖提示信息: 打开resource/lang/en/validation.php注释掉英文提示信息 $ sudo vim resource/lang/en/validation.php 将下面的 ...

  2. Date动态获取时间

    ·getDate            |  根据本地时间获取当前日期(本月的几号) ·getDay             |  根据本地时间获取今天是星期几(0-Sunday,1-Monday.. ...

  3. 简繁体转化处理 opencc 安装【centos 7】

    代码 #准备工作 yum install cmake yum install git #下载代码 git clone https://github.com/BYVoid/OpenCC #安装文档生成 ...

  4. java对文件的基本操作

    package cn.edu.fhj.day009.FileDemo; import java.io.File; import java.io.IOException; public class Fi ...

  5. GeoHash(Java实现)

    package com.koubei.collect_script.demo; import java.util.ArrayList; import java.util.Arrays; import ...

  6. 2.SSM整合_多表_一对一或多对一的增删改查

    一对一和多对一配置一样,这里就放到一起. 1.配置文件跟上一章一样,这里就不多写了,主要是Mapper映射文件 多 接口 public interface NewsMapper { public vo ...

  7. Github远程推送一直Everything up-to-date

    问题描述: Github远程推送一直Everything up-to-date,但其实并没有推送成功,远程库中没有更新文件 可能原因分析及解决方法: "git push with no ad ...

  8. nginx获取上游真实IP(ngx_http_realip_module)

    realip模块的作用是:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP,如果没有realip模块,nginx的access_log里记录的IP会是反向代理服务器的IP,PHP中$_S ...

  9. CSS引用方式及样式层叠机制

    CSS引用方式有3种,三种分别为:外部引入.内部引入.行内样式,下面一 一进行介绍. 1.外部引入:CSS代码在一个独立的文件中,HTML通过Link标签引入到页面. 代码格式:<link re ...

  10. Tensorboard可视化

    # -*- coding: utf-8 -*-"""Created on Sun Nov 5 09:29:36 2017 @author: Admin"&quo ...