https://stackoverflow.com/questions/28418360/jwt-json-web-token-audience-aud-versus-client-id-whats-the-difference

本篇只聚焦ids的启动配置的流程以及关联的核心接口和类,对应官方文档https://identityserver4.readthedocs.io/en/latest/topics/startup.html

启动配置宏观上说做了两件事:注册ids运行过程中需要使用到的相关服务、注册ids终结点中间件

注册服务

在startup中

public void ConfigureServices(IServiceCollection services)
{
var builder = services.AddIdentityServer();
}
  • ids中定义了很多接口,以实现可扩展性,这些接口都有默认实现,通常默认实现还配有对应的option对象,这些接口、实现和对应的option都在这里注册到ioc容器
  • 大部分情况下我们在这里对各组件的option对象进行配置就可以了
  • 特殊情况下我们需要自定义实现某些接口,然后在这里替换ids注册的接口实现

Token验证器ITokenValidator

它提供对AccessToken和IdentityToken的验证的两个方法,默认实现:TokenValidator

这俩方法都会用到IKeyMaterialService.GetValidationKeysAsync

验证过程中会使用到key材料,这个key材料的管理由IKeyMaterialService提供,啥是key材料?往后看

密钥材料管理服务IKeyMaterialService

ids4运行过程中会使用到各种密钥,比如token的加解密,jwt签名验证等,这些密码在ids称为 key材料。可以简单理解为:key材料 = 密钥 + 签名算法

主要又分为两种key材料:SigningCredential、ValidationKeys,前者主要是各种地方的签名用(经过查看源码只是用来生成各种hash值),后者只是用来加解密token的,上面说了就是identityToken和accessToken

由于签名是比较简单的逻辑,所以不想token的处理还专门定义了token验证器,所有需要签名的地方是直接引用IKeyMaterialService的

由IKeyMaterialService统一管理密钥,默认实现类是DefaultKeyMaterialService,它只是提供密钥的业务逻辑管理

密钥的存储时通过对应IStorage提供的,SigningCredential、ValidationKeys分别有自己的Storage

中间件的执行

EndPointRouter 路由找到EndPoint,并执行它,

请求code

通过code请求accessToken

注销等 都是不同的endpoint

public void ConfigureServices(IServiceCollection services)
{
var builder = services.AddIdentityServer();
}

ids运行过程中需要的服务由这个方法统一注册,具体注册了哪些核心服务后面再慢慢补充

key材料

所谓的key材料 = 密钥 + 加密算法

AddSigningCredential

生成token时会使用这里的密钥信息进行加密,猜想请求identity资源和api资源时验证token时也会使用到这个密钥。

AddDeveloperSigningCredential

开发时在根目录中创建的零时密钥

AddValidationKey

在jwttoken验证签名时会使用到的密钥,通过源码查客户端注销时会去请求ids4服务器,会携带参数,那些参数的验证签名也是用的这个

In-Memory configuration stores

启动阶段从硬编码、配置、数据库获取api资源、identity资源、client配置。这个其实也可以用于生产环境

AddInMemoryClients AddInMemoryIdentityResources AddInMemoryApiResources

Test stores

AddTestUsers 这个通常就不建议在生产环境使用了

Additional services

ids4中间件处理过程中会使用到各种服务,而这些服务就是扩展点,很多都可以替换

AddExtensionGrantValidator

TokenEndpoint负责处理code的获取accesstoken identitytoken的获取,其中一个重要的步骤就是验证请求,会根据不太的授权模式,如:AuthorizationCode、ClientCredentials、Password、RefreshToken做不同的授权检查,AddExtensionGrantValidator就是表示不属于以上类型的自定义授权类型,所以可以通过自定义的授权检查器来实现更多的授权流程

AddSecretParser

机密解析器,总的来说就是从请求中解析得到机密信息,提取到的结果用ParsedSecret表示。比如从请求中获取clientid,securet等信息

AddSecretValidator

上面得到client信息,下面就是验证,设计方式与上面类型

AddResourceOwnerValidator

资源所有者模式中用来验证用户密码的

AddProfileService

添加用于连接到自定义用户配置文件存储的IProfileService实现。 获取用户Profile时调用的,默认实现DefaultProfileService是直接从身份验证的cookie中获取申明然后响应给用户

AddAuthorizeInteractionResponseGenerator

用户登陆阶段调用它来决定向用户显示什么,需要登陆?需要确认?需要跳转?

ids4-startup的更多相关文章

  1. .net core 2.x - ids4 - identity - two factory 登录认证

    本片内容使用到ids4+ids4.Entityframework持久化表单,以及core的identity相关表的一并持久化,然后就是登录认证,认证使用email发送邮件的方式.所以这里涉及到四块内容 ...

  2. 二、IDS4配置服务

    它是根据定义配置服务Config.cs文件来生成客户端和API使用该服务所需的配置数据. 一.IDS4签名服务 1.为项目添加NuGet包. 2.IDS4服务制定的配置Config.cs. using ...

  3. 四、IDS4建立Authorization server和Client

    一.准备 创建一个名为QuickstartIdentityServer的ASP.NET Core Web 空项目(asp.net core 2.2),端口5000创建一个名为Api的ASP.NET C ...

  4. 三、IDS4建立authorization server

    建立authorization server 一.环境搭建 1.创建项目 2.引用NuGet的identityserver4 3.配置asp.net core 管道 打开Startup.cs, 编辑C ...

  5. 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter

    中间件的注册除了可以借助Startup对象(DelegateStartup或者ConventionBasedStartup)来完成之外,也可以利用另一个叫做StartupFilter的对象来实现.所谓 ...

  6. 学习ASP.NET Core, 怎能不了解请求处理管道[4]: 应用的入口——Startup

    一个ASP.NET Core应用被启动之后就具有了针对请求的处理能力,而这个能力是由管道赋予的,所以应用的启动同时意味着管道的成功构建.由于管道是由注册的服务器和若干中间件构成的,所以应用启动过程中一 ...

  7. ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)

    ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...

  8. Tips for Planning Your Business Startup

    原文链接:http://domaintree.me/?p=1037 By Robert Thibodeau –  Starting a business can be a very daunting ...

  9. Asp.Net MVC<九>:OWIN,关于StartUp.cs

    https://msdn.microsoft.com/zh-cn/magazine/dn451439.aspx(Katana 项目入门) 一不小心写了个WEB服务器 快刀斩乱麻之 Katana OWI ...

  10. Startup配置类 居然又是约定

    Microsoft.Owin.Host.SystemWeb 这个dll可以让OWin接管IIS的请求,虽然同样是托管在IIS,但是所有的请求都会被OWin来处理.在OWin的4层结构中(Applica ...

随机推荐

  1. 3.16 Linux删除文件或目录(rm命令)

    当 Linux 系统使用很长时间之后,可能会有一些已经没用的文件(即垃圾),这些文件不但会消耗宝贵的硬盘资源,还是降低系统的运行效率,因此需要及时地清理. rm 是强大的删除命令,它可以永久性地删除文 ...

  2. Rsync远程同步知识点总结

    Rsync: 简介:是一个开源的快速备份工具.可以在不同主机之间镜像同步整个目录,支持增量备份,保持链接(硬链接.软连接)和权限,且采用优化同步算法,传输前执行压缩(传输过程中效率加快了,但是会增加c ...

  3. 6. jenkins触发器

    常用的触发器 Jenkins内置4种构建触发器 触发远程 构建其他工程构建后触发(Build after other projects are build) 定时构建(Build periodical ...

  4. ARC127E Priority Queue

    ARC127E Priority Queue 分析性质+dp. 思路 由于每次加入的数肯定是一个 \(a\) 的排列,但这个角度不好考虑. 设 \(\{a\}\) 为最终状态的集合,其中 \(a_i& ...

  5. TP5的项目能正常返回数据,但是状态码是500

    翻出来以前一个很老的TP5项目,忘记是什么功能系统了,就本地启动了一下,发现返回状态码500,开始以为是index.php被我隐藏后rewrite导致的,后来搜索了一下,发现大家也有这个问题,然后看到 ...

  6. SpringFlex框架搭建

    或者参考http://limingnihao.iteye.com/blog/830409.使用Eclipse的Maven构建SpringMVC项目. 1.1 简单介绍 Spring是一个轻量级的控制反 ...

  7. if else的多种替换方式

    1)利用逻辑判断的短路运算来实现 && 和 ||(&& 中第一个表达式为假就不会去处理第二个表达式,|| 则相反) // if为真 if (bool) { value ...

  8. Linux常用系统性能监控工具

    top 首先关于top命令,我想大家应该都挺熟悉的了. Linux系统下的top命令有点类似于Windows系统里的任务管理器,能够实时动态地给出系统中各个进程的资源占用状况,是Linux下比较常用的 ...

  9. CSS 变量与运算

    1.变量 变量声明:变量名使用 "--" 为前缀,且区分大小写 /* 全局变量 */ :root{ --bgColor: red; } /* 布局变量 */ p{ --bgColo ...

  10. MarkDown文档的编写

    MarkDown的基本语法 MarkDown的标题语法  通过#进行创建标题,#的数量控制标题的级别 MarkDown的段落语法  通过空白行将一行或者多行文本进行分隔 MarkDown的强调语法 粗 ...