IdentityServer4内存模式改造成Db查询
这篇文章主要介绍 identity server4 3.x的版本,目前最新已经是4.x版本,其实完全可以用 identityserver4的EF版本数据源基于DB,以下是基于 identityserver基于内存版,用户模块改写成查询 DB,外部客户端和scheme 的配置任然是使用json写死的,阅读identityserver源码,了解到如何扩展 关于用户登录的配置
准备工作:identity server4的安装模板先安装好,控制台命令行 创建一个基于内存模式的identity server4 项目
输入dotnet new
再输入:dotnet new is4inmem。出现“The template "IdentityServer4 with In-Memory Stores and Test Users" was created successfully.” 证明创建好了
一:打开项目找到登录方法
我们只需要 TestUserStoe 这个类换成我们自己的
二:换掉 TestUserStoe
2.1 新建一个interface IUserInfoervice,在新建实现类:UserInfoervice
再次打开 TestUserStore 这个类,反编译可以可以到里面的方法,我们 UserInfoervice 也需要实现那4个方法,换成我们自己的用户逻辑
2.2注入到IOC容器中:
Services.AddTransient<IUserInfoervice, UserInfoervice>();
2.3 重写 ids4 测试用户的服务
打开他的源码,AddTestUse方法r的源码,可以看到 这个只是包了一层
我们要做的就是全部切换成我们自己逻辑, 替换掉 :TestUserProfileService,替换掉 TestUserResourceOwnerPasswordValidator,这个主要是针对 密码授权模式的,也替换掉
//这句话 可以直接注释掉了,因为我们 UserInfoervice 已经注册IOC了
// builder.Services.AddSingleton(new TestUserStore(users));
TestUserProfileService源码,新建立 CustomProfileService这个类继承 IProfileService 实现 方法
TestUserResourceOwnerPasswordValidator 新建立
CustomUserResourceOwnerPasswordValidator 这个类继承 IResourceOwnerPasswordValidator实现 方法
最后在IOC中替换:
三:控制器中 把 TestUserStore 替换成 UserInfoervice
到此,就已经切换成功了
四 关注点 3个方法,可以换成自己的登录逻辑
FindBySubjectId // 根据SubjectId查找用户
ValidateCredentials //根据用户名和密码,验证
FindByUsername //根据查找用户名进行查找
UserInfoervice可以先把 TestUserstoke 里面的实现方法拷贝过来,再换成数据库查询方式就可以了