OpenIdDict 多个授权服务器无法解码相同的访问令牌

Posted

技术标签:

【中文标题】OpenIdDict 多个授权服务器无法解码相同的访问令牌【英文标题】:OpenIdDict Multiple authorization servers can't decode the same access token 【发布时间】:2021-10-12 06:34:09 【问题描述】:

我正在使用一个网络设置非常奇怪的客户端。基本上,由于多次收购、合并等,他们拥有多个带有自己的服务器集群的小型分段网络。这是一场噩梦。

我已正确设置授权服务器并且它们都运行相同的代码,但是当我尝试将我的笔记本电脑从一个位置带到另一个位置时,我被注销并必须重新登录。很多员工在站点之间出差,所以一直注销会引起一些抱怨。

API 和授权服务器的每个实例都能够使用相同的数据库,但每个站点都有自己的授权和资源服务器。

我注意到的是:

如果我呆在一个地方,我的访问/刷新令牌设置工作得很好,没有任何问题 如果前往另一个站点,新站点授权服务器似乎无法验证访问令牌并将我注销 有一个站点带有负载平衡器,如果我在站点之间移动,它会随机注销我。

该应用基于 .NET Core 2.2 和 OpenIDDict 2.0 构建。出于预算原因,升级任何一个都不是一种选择。

是否有配置共享证书或密钥以便所有服务器都可以解码访问令牌?基本上多个授权服务器能够解码任何其他授权服务器生成的访问令牌?

【问题讨论】:

【参考方案1】:

我能够弄清楚。我不得不改变这个:

        services.AddDataProtection()
            .PersistKeysToDbContext<DbContext>();

到这里:

        services.AddDataProtection()
            .SetApplicationName("appName")
            .ProtectKeysWithCertificate(MyX509Certificate2)
            .PersistKeysToDbContext<DbContext>();

【讨论】:

以上是关于OpenIdDict 多个授权服务器无法解码相同的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

OpenIddict:如何在资源服务器中注册签名密钥以验证令牌?

JWT 令牌未在远程服务器上验证,无法匹配“孩子”错误

AuthTokenAccessException:无法解码JWT承载:没有JWT承载存在于“授权”的请求头

OpenIddict:当两个或更多服务实例计数时出现 401 错误

OpenIddict 的依赖注入错误

OpenIddict 的临时关键问题