IdentityServer4 配置负载均衡
如果使用 IdentityServer4 做授权服务的负载均衡,默认情况下是不可以的,比如有两个授权服务站点,一个资源服务绑定其中一个授权服务(Authority配置),如果通过另外一个授权服务获取access_token,然后拿这个access_token去访问资源服务,会报 401 未授权错误。
因为生成access_token受以下影响的因素:
scope(授权范围):服务包含在 scope 内,生成的access_token,才能访问本服务。
lifetime(生命周期):过期的access_token,无效访问。
client ID (client_id):不同的客户端 ID,生成不同对应的access_token。
issuer name (iss):翻译过来“发行者名称”,类似于主机名。
RSA 加密证书(补充):不同的加密证书,生成不同对应的access_token。
要让负载均衡下的两个授权服务,可以正常使用的话,需要确保两台授权服务以上五种因素完全一致,除了 issuer name (iss),其他因素都是一样的。
手动设置IssuerUri代码: var builder = services.AddIdentityServer(x => x.IssuerUri = "http://111.12.2.21:8000"); //slb 地址 资源服务授权配置修改: app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions { Authority = "http://111.12.2.21:8000", //slb 地址 ApiName = "trade_refund", RequireHttpsMetadata = false });
注意slb地址是负载均衡的地址,而不是单机服务器的地址。
官方文档:
设置 IssuerUri(发行人)将出现在发现文档和发布的 JWT 令牌中的名称。建议不要设置此属性,它会根据客户端使用的主机名推断颁发者名称。但做负载还是加上负载地址uri
网上说IssuerUri 这个东西随便指定都可以。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下