IdentityServer4 3.1.x 迁移到 4.x
一.前言#
IdentityServer4 4.x已经正式发布了,根据官方的 Release Note,3.1.x 到 4.x 的变更也是非常多,今天在将代码迁移到 4.x 遇到了一些问题在此记录下来,我使用的 IdentityServer4 的各种数据持久化,比如 ClientStore,ResourceStore 等,都是完全自定义的,非 EntityFramework,如果你是使用的 EF 那么官方提供了迁移脚本,请自行查找。
二. Resource 相关变化#
ApiResource 的 Scope 正式独立出来为 ApiScope
对象,开发者可能是想让用户明白 ApiResource 和 Scope 的关系,而不是把它们混为一谈,因为以前这一步都是 IdentityServer4 帮你做了,会自动以 ApiResource 的名称为 Scope,所以可能存在认为它们两个是相等的情况,实际则不然,Scope 是属于 ApiResource 的一个属性,可以包含多个 Scope。以源码来看:
1.ApiResource 的变化#
3.1.x:
4.x:
2.InMemory 运行方式的变化#
对于大家在学习 IdentityServer4 时熟悉的 InMemory 来说,AddInMemoryApiResources
变为了 AddInMemoryApiScopes
也就是变了名字,但一定要明白这里面实际的不同。
3.1.x:
4.x:
3.Resources 的变化#
此类的构造方法变了,增加了 apiScopes 的参数,直接受影响的是 IResourceStore
的实现,如果自定义了此接口的实现,那么需要注意这个问题。
3.1.x:
4.x:
4.IResourceStore 的变化#
三.PublicOrigin 属性被删除#
IdentityServerOptions 对象中 PublicOrigin
属性没有了,此属性涉及到在生产环境经过nginx反向代理等设施后 configuration endpoint 获取到的地址的准确性,经过查询官方的 Issues,目前有两个解决方案:
1.在中间件中调用扩展方法
app.Use(async (ctx, next) =>
{
ctx.SetIdentityServerOrigin("https://foo.com");
await next();
});
or
app.Use(async (ctx, next) =>
{
ctx.Request.Scheme = "https";
ctx.Request.Host = new HostString("foo.com");
await next();
});
2.正确设置反向代理中的 X-Forwarded-For
、X-Forwarded-Proto
和X-Forwarded-Host
,详细设置请查看:Configure ASP.NET Core to work with proxy servers and load balancers
相关资料:
关于此问题官方人员的原话:It's gone. It was a hack - please use the forwarded headers approach in ASP.NET Core from now on.
我个人更推荐第二个方法
四.IPersistedGrantStore 的变化#
IPersistedGrantStore 接口的方法参数有变动:
五.总结#
以上就是我在 IdentityServer4 3.1.x 到 4.x 迁移所遇到的各个问题,所有问题都解决了并且成功运行。我是重度自定义接口实现,包括表都是自行设计的,非EF,自定义实现的接口如下:IClientStore
、IPersistedGrantStore
、IProfileService
、IResourceOwnerPasswordValidator
、IResourceStore
。3.1.x 到 4.x 确实许多 break changes,但从遇到的几个实际问题来说,开发人员在设计是已尽量兼容了老版本,希望我所遇到的问题,能帮到大家。官方开了一个 issues 记录迁移的问题,如果大家有难以解决的问题,不妨去提交:https://github.com/IdentityServer/IdentityServer4/issues/4592
作者:晓晨Master(李志强)
出处:https://www.cnblogs.com/stulzq/p/13818199.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
目前学习.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!