专栏首页晓晨的专栏IdentityServer4 3.1.x 迁移到 4.x

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-ForX-Forwarded-ProtoX-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,自定义实现的接口如下:IClientStoreIPersistedGrantStoreIProfileServiceIResourceOwnerPasswordValidatorIResourceStore。3.1.x 到 4.x 确实许多 break changes,但从遇到的几个实际问题来说,开发人员在设计是已尽量兼容了老版本,希望我所遇到的问题,能帮到大家。官方开了一个 issues 记录迁移的问题,如果大家有难以解决的问题,不妨去提交:https://github.com/IdentityServer/IdentityServer4/issues/4592

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASP.NET Core的身份认证框架IdentityServer4(6)- 开始

    晓晨
  • IdentityServer4 实战文档

    晓晨
  • ASP.NET Core的身份认证框架IdentityServer4(7)- 使用客户端认证控制API访问

    晓晨
  • 使用pypiserver搭建私有源

    py3study
  • Thread.sleep(0) 到底有什么用?

    我们可能经常会用到 Thread.Sleep 函数来吧使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?

    良月柒
  • 搜索引擎安全利用

    2019年3月24日 ⋅ 浏览量: 31    ...

    以谁为师
  • 使用 GraphQL 的 6 个月

    GraphQL 这个名词已经火了一段时间,但是一直没有体验过,无意中发现了一篇使用体验的文章,就想着翻译下分享给大家,如果翻译有问题的,还望批评指正。译文出自:...

    出其东门
  • 小白最关心的8个UI问题

    近几年来,UI设计绝对是设计行业中的瞩目之星,无论在PC端、移动端还是游戏上都是大放异彩。越来越多的年轻人选择UI设计这个行业,然而刚踏入这行的设计新人对未来...

    奔跑的小鹿
  • 未来20年,AI将向人类大脑学习的三个重要特征

    人类大脑新皮层这三个基本属性——通过重新连接进行学习(learning by rewiring)、稀疏表示(sparse representations)和化身...

    AI科技大本营
  • 安装docker和docker-compose实例详解

    6.鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,强烈建议安装 Docker 之后配置 国内镜像加速

    砸漏

扫码关注云+社区

领取腾讯云代金券