最近项目中需要使用Identity Server 4,以前对这个技术只是有些了解,没有系统研究过,网上相关的资料不少,大多是从编写一个简单的认证服务开始,离能够落地使用有相当的距离,理论学习如何不结合实际,只能停留在概念层面。我希望的是能有一个已经可以部署的基于Identity Server 4的认证服务应用,在此基础上研究客户端和Api的编写,以及对各种需求场景进行测试。对这样一个应用的基本要求除了认证服务的功能以外,还包括(1)具备编辑或者配置功能。能够编辑User、Role、Client、Scope、Api Resource等,编辑的内容可以保存在数据库或者配置文件中;(2)可以工作在SSL协议和非SSL协议。在本地测试时,为了简化环境,希望可以不使用SSL协议。(3)可以独立部署,也可以部署在IIS,还需要支持Docker容器部署。沿着这个思路,在GitHub中找到了IdentityServer4.Admin这个项目,基本上符合要求:https://github.com/skoruba/IdentityServer4.Admin 。这个项目支持使用模板开发,可以使用模板创建新的项目,按照自己的需要进行改造,我在这项目的基础上,增加了对BasePath的支持,这样可以将认证服务器和编辑模块部署到同一端口的不同目录下(使用IIS或者Nginx等反向代理),还增加了对非SSL的支持。在Docker支持方面,原项目的配置过于复杂,改为针对认证服务和编辑模块生成两个不同的镜像,在部署时分别创建容器就可以了。项目的地址是 https://github.com/zhenl/IDS4Admin 。项目使用Visual Studio 2022,基于.Net 5(认证服务和管理)和.Net 6(辅助工具控制台)。
克隆或者下载项目后,运行buildscript.bat可以生成部署文件和辅助工具。生成的目录与项目目录同级,名称为IDS4AdminPublish,包括三个子目录,一个是认证服务器(STS),一个是管理界面(Admin),还有一个是辅助工具(Tool)。辅助工具方便生成配置文件和初始的种子数据。
首先进入Tool目录,运行辅助工具IDS4Admin.Tool.exe,设置认证服务器和管理界面应用的地址、数据库的类型和连接字符串,设置完成后执行命令“5”生成配置文件。
生成的json文件保存在Output目录下,包括两个子目录,Admin子目录中包括生成的三个json文件,这三个文件需要拷贝到管理应用的运行目录中(IDS4AdminPublish/Admin),覆盖现有文件,STS子目录中包括生成的认证服务的配置文件,拷贝到认证服务的运行目录中(IDS4AdminPublish/STS)。第一次运行时,要首先运行管理界面应用,因为初始化数据库的部分在这个应用中,然后运行认证服务器,如果一切顺利,在浏览器中访问管理应用,会跳转到认证服务器,要求登录,初始用户名为admin,密码为P@$$word123。登录完成后,就可以对认证服务的资源进行管理了。
环境搭好了,我们可以编写客户端和Api进行测试,深入理解相关的概念。