• ids4-startup


    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

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

  • 相关阅读:
    28SQL 撤销索引、表以及数据库
    常见漏洞利用讲解
    6JavaScript 输出
    29_SQL ALTER TABLE 语句
    【首发】入门必看,性能测试指标详解,小白从零入门性能测试
    使用阿里云oss,在小程序端部分图片有时候显示,有时候不显示
    (0 , _auth.default) is not a function的问题
    uniapp开发小程序onReachBottom只触发一次
    Httprunner环境搭建
    4、vite创建vue项目
  • 原文地址:https://www.cnblogs.com/jionsoft/p/13499783.html
Copyright © 2020-2023  润新知