通过第二篇文章我们已经知道了授权的内部实现通过自定义的授权Handler来的,同样的道理

OpenIdConnect 同样是通过 OpenIdConnectHandler来请求授权的

那么它内部又是怎么来实现的呢?

接下来直接分析OpenIdConnectHandler的处理,如我们加了那么多参数:

 .AddOpenIdConnect(o =>
{
o.ClientId = "ClientId";
o.ClientSecret ="Secret";
o.Authority ="Authority" ;
o.ResponseType = OpenIdConnectResponseType.CodeIdToken;
o.GetClaimsFromUserInfoEndpoint = true;
});

在IdentityServer4认证服务端其实就是可以配置这些 clientid 等,AddOpenIdConnect 实际就是通过这种(OIDC)协议去发起远程请求认证,结合前面一章,其实还是通过IAuthenticationServices、IAuthenticationHandler里面去处理重写实现

HandleRequestAsync,而在HandleRequestAsync内部就是通过远程请求授权认证,下面来看这段

<!doctype html>
<html>
<head>
<title>这里就是重新定向到身份提供者</title>
</head>
<body>
<form name="form" method="post" action="{}">
{}
<noscript>单击完成授权: <input type="submit" /></noscript>
</form>
<script>document.form.submit();</script>
</body>
</html>

OpenIdConnect内部动态的根据参数拼凑了这样一段html代码并且直接提交执行,说道这里可能就会想到 在使用IdentityServer4的时候 其中的 302 跳转,其实就是动态的输出了这个页面,然后立即提交跳转到身份认证提供者

这里其中还要说的就是 SignOut的处理,在使用OIDC登录进行身份认证的时候,如果 Signout的时候需要 Signout 远程的身份提供者,同时如果这里有SSO登录,还要清除掉其他系统的登录信息,这里就要主动发起通知了,所以这里会有HandleSignOutCallback的处理,就是为了回调通知其他身份认证的应用,通知他们清除本地的身份认证退出,所以一般在使用OIDC登录身份认证的时候,一般还需要写Callback处理,具体可以参考前面的IdentityServer4相关文章

关于其中的Events事件就多说,无外乎就是外部需要对内部认证失败等等信息后续做的一些处理事件

.NetCore源码阅读笔记系列之Security (三) Authentication & AddOpenIdConnect的更多相关文章

  1. .NetCore源码阅读笔记系列之Security (二) 自定义认证实践

    通过前面对AddCookie 或者 AddOpenIdConnect 等了解,其实里面都实现了一个AuthenticationHandler<TOptions>的认证处理,接下来我们来简单 ...

  2. .NetCore源码阅读笔记系列之Security (一) Authentication & AddCookie

    如果你使用过.NetCore开发过程序,你会很清楚,在其中我们经常会用到一些如下的代码 services.AddAuthentication(options => { options.Defau ...

  3. .NetCore源码阅读笔记系列之Security (四) Authentication & AddJwtBearer

    接下来我们在来看下AddJwtBearer,这个与AddOpenIdConnect不太一样,后者是远程发起身份认证请求是一种主动发起式的,多用于web等客户端,验证发生在身份认证服务端,而前者是一种被 ...

  4. .NetCore源码阅读笔记系列之HttpAbstractions(五) Authentication

    说道认证&授权其实这块才是核心,这款跟前面Security这块有者紧密的联系,当然 HttpAbstractions 不光是认证.授权.还包含其他Http服务和中间价 接下来先就认证这块结合前 ...

  5. nsq源码阅读笔记之nsqd(三)——diskQueue

    diskQueue是backendQueue接口的一个实现.backendQueue的作用是在实现在内存go channel缓冲区满的情况下对消息的处理的对象. 除了diskQueue外还有dummy ...

  6. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

  7. CI框架源码阅读笔记5 基准测试 BenchMark.php

    上一篇博客(CI框架源码阅读笔记4 引导文件CodeIgniter.php)中,我们已经看到:CI中核心流程的核心功能都是由不同的组件来完成的.这些组件类似于一个一个单独的模块,不同的模块完成不同的功 ...

  8. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

  9. CI框架源码阅读笔记2 一切的入口 index.php

    上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...

随机推荐

  1. springboot(八)自定义Filter、自定义Property

    自定义Filter 我们常常在项目中会使用filters用于录调用日志.排除有XSS威胁的字符.执行权限验证等等. Spring Boot自动添加了OrderedCharacterEncodingFi ...

  2. ELF格式探析之三:sections

    前文链接: ELF格式探析之一:Segment和Section ELF格式探析之二:文件头ELF Header详解 今天我们讲对目标文件(可重定位文件)和可执行文件都很重要的section. 我们在讲 ...

  3. c#中如何在一个panel中放入窗体

    Form2 f2 = new Form2(); //实例化窗体FORM2 f2.TopLevel = false; //设置为非顶级窗体 f2.FormBorderStyle = FormBorder ...

  4. Linux - 文件操作

    touch file # 创建空白文件 rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制) dos2unix # windows文本转linux文本 unix2dos # lin ...

  5. CF418D Big Problems for Organizers

    传送门 题意,给一棵树,每次给两个点\(x,y\),求\(\max_{i=1}^{n}(\min(di_{x,i},di_{y,i}))\) 看std看了好久 以下是一个优秀的在线做法,\(O(nlo ...

  6. hashMap之jdk1.7和jdk1.8

    参考链接: http://allenwu.itscoder.com/hashmap-analyse https://tech.meituan.com/java-hashmap.html

  7. B. Planning The Expedition

    题目链接:http://codeforces.com/contest/1011/problem/B 题目大意: 输入的n,m代表n个人,m个包裹. 标准就是 每个人一开始只能选定吃哪一个包裹里的食物, ...

  8. jquery 学习(五) - CSS 操作

    HTML + CSS 样式 /*CSS样式*/<style> body{ margin: 0; } div{ width: 100%; height: 2000px; background ...

  9. python - 包装 和 授权

    包装 # 包装(二次加工标准类型) # 继承 + 派生 的方式实现 定制功能 # 示例: # class list_customization(list): #重新定制append方法,判断添加的数据 ...

  10. css 背景图片自适应元素大小

    一.一种比较土的方法,<img>置于底层. 方法如下: CSS代码: HTML: <img src="背景图片路径" /> <span>字在背景 ...