企业应用架构研究系列二十五:IdentityServer4 认证服务搭建

发布时间 2023-03-22 19:09:28作者: 温森特

  IdentityServer4 更新了开源协议,曾经想替换它,不在使用IdentityServer4 ,但是后来,研究来研究去,发现IdentityServer4 的功能实在是强大,设计体系完整,随着最后版本的升级,现在 IdentityServer4 已经可以在.Net Core 6.0 环境中进行部署使用了。基于中小型项目快速开发搭建的需要,还是有必要对IdentityServer4 的使用做一次 总结。

  首先需要安装一下必要的Nuget 支持包,如下图所示,本示例采用的SQL Server 服务器,安装的是EFCore 最新的版本EFCore7.0,安装Nuget包就不在这里赘述了,基本.Net 开发人员都会的。

  

  安装必要的Nuget 包后,需要对IdentityServer4 在程序主机启动的时候,进行注册配置,这个启动程序的配置至关重要,也是 IdentityServer4 配置里面最核心的部分,如下图所示。里面需要配置一下 IdentityServer4 的Token 颁发策略,同时需要对 IdentityServer4 的PersistedGrantDbContext 序列化Token库,ConfigurationDbContext 配置信息库进行配置。IdentityServer4 的加密签名Provider 可以按照其接口协议,采用数字证书签名,也可以采用非对称加密RSA 生成的公私钥形式进行签名。本示例采用了RSA生成的私钥进行的IdentityServer4  加密技术。

  

  IdentityServer4 可以标准的OpenID Connect and OAuth 2.0认证方式,但中小型项目中,更青睐自定义的认证方式,这个时候,就需要实现 IExtensionGrantValidator 这个接口,进行认证方式扩展,具体实现也是非常简单的,如下图所示。实现完逻辑后,在应用程序主机的启动时候,进行注册,.AddExtensionGrantValidator<IdentityPasswordValidator>(),上面的贴图也有该示例。

  

  IdentityServer4 做好了这些后,还需要做一个数据库的初始化操作,方便IDS服务的快速的部署,也是提高程序的完整性。这个其实也很简单,利用EFCore 的强大的Migration 功能,把 PersistedGrantDbContext ,ConfigurationDbContext ,和自定义的DBContext 进行初始化封装,同时,可以对IdentityServer4  里面对 ApiScopes,Clients,IdentityResources,ApiResources 等配置资源进行动初始化的配置。这个配置也可以通过安装IdentityServer4.Admin.UI 包的形式,通过界面进行配置。但对于中小型项目,基本配置一次,很少进行调整,因此,我们在这里,通过代码进行了初始化配置这个方案。IdentityServer4 的整体配置见下图。

  

  做完这些开发配置后,我们就可以使用 IdentityServer4 为我们提供的认证授权服务了。