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. debug指南-基础bug

    基础Bug 本章节主要阐述一些最基本的bug. 虽然这些bug看起来很弱智简单,但正是因为这些小bug,让我们调代码的时间增加至少 \(2,3\) 个小时. 本系列的宗旨就是综合这些小bug极其对应解 ...

  2. EVE-NG全面教程带下载资源以及链接-原创

    有关于EVE-NG的教程和资源 https://forum.eve-ng.cn/forum.php 1. 经验丰富的专业同行较多 2. 官方论坛,权威可靠 3. 有免费且可靠的镜像可以下载 并且简单好 ...

  3. ext 库及 pb_ds 在 OI 中的应用

    ext 库在 OI 中的应用 写一个帖子,防止以后忘了. pb_ds 部分 pb_ds 万能头 #include<bits/extc++.h> 来包含 ext 库中所有的头文件(例如 pb ...

  4. vscode c/c++ 和 MSYS2 环境配置记录

    vscode c/c++ 和 MSYS2 环境配置记录 网上的教程有一定错误和过时,这里收集了当前的最优配置. MinGW/MSYS2 安装 MSYS2 是一个类似于Linux的shell环境,可以在 ...

  5. Python源码分析2 - 一个简单的Python程序的执行

    本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...

  6. Graylog之进阶操作

    有关系统的索引,权限,pipline 参考文章: https://mp.weixin.qq.com/s/LROHPjZEJPMsS5M_a3pPFw https://blog.csdn.net/wei ...

  7. PM2部署DotNet应用程序

    pm2简介 PM2是一个Node.js的进程管理工具,可以帮助开发者简化Node.js应用的部署和运维.它提供了进程守护.负载均衡.日志管理等功能,可以监控应用程序的运行状态,并在发生意外情况时自动重 ...

  8. 使用 Jmeter进行压测

    一.环境配置 因为jmeter需要java环境,所以需要下载Jdk和Jmeter.需要注意jdk的版本和jmeter的匹配问题 推荐大家观看Furion的作者百小僧的视频来学习,讲的很细 https: ...

  9. CMYK与RGB参数转换公式及转换方法

    1. RGB色彩模式 自然界中绝大部分的可见光谱可以用红.绿和蓝三色光按不同比例和强度的混合来表示.RGB分别代表着3种颜色:R代表红色,G代表绿色.B代表蓝色.RGB模型也称为加色模型,如图5所示. ...

  10. 助推乡村振兴,四川农担X中电金信大数据智能风控平台彰显“榜样的力量”

    ​在2024年3月召开的两会上,政府工作报告首次提到了要大力发展科技金融.绿色金融.普惠金融.养老金融.数字金融,为深入推进金融高质量发展,走中国特色金融发展之路指明了方向.其中,四川农担作为一家专注 ...