在我的应用程序前面添加NGNIX代理后,我在身份服务器4上遇到了奇怪的错误。
我的.Net Core身份服务器在Docker容器上运行,端口为8080。
Ngnix代理(使用https://github.com/nginx-proxy/nginx-proxy)已配置将443路由到Docker容器8080。
在成功验证回调端点后,它无法验证伪造令牌。
奇怪的是,整个情景对于我启动.Net Core应用程序时种子用户有效,但对于通过我的API创建的新用户无效。
任何想法或建议都将不胜感激。
在我的应用程序前面添加NGNIX代理后,我在身份服务器4上遇到了奇怪的错误。
我的.Net Core身份服务器在Docker容器上运行,端口为8080。
Ngnix代理(使用https://github.com/nginx-proxy/nginx-proxy)已配置将443路由到Docker容器8080。
在成功验证回调端点后,它无法验证伪造令牌。
奇怪的是,整个情景对于我启动.Net Core应用程序时种子用户有效,但对于通过我的API创建的新用户无效。
任何想法或建议都将不胜感激。
由ASP.NET Core发行的会话cookie使用数据保护API进行加密。
用于签署 cookie 的密钥存储在密钥环中。如果您重新部署应用程序而未正确配置它,则将在新的密钥环中发布新的加密密钥。
如果无法找到用于加密 cookie 的密钥,则表示所有客户端浏览器中的现有会话 cookie 无法再进行解密。
请参阅此文章了解有关此API的信息,以及此文章了解如何配置它。
IdentityServer和Client应用程序都使用数据保护API,因此两者都需要具有永久的密钥环。当您重新部署容器时,密钥环会丢失,除非您已将密钥环放置在文件系统上的某个永久卷中或以其他方式持久化。API支持许多存储密钥环的位置,包括数据库、redis、Azure Key Vault等。
我在我的演示环境(生产和本地都可以)遇到了这个问题,Tore Nestenius的答案帮助我解决了它。
实际上,我重新安装了所有的演示环境。因此,密钥库是新的,但运行网站的浏览器却使用旧的cookie。这导致了以下错误:
System.Security.Cryptography.CryptographicException:密钥未在密钥环中找到。
只需清除您的cookie!
这将从新的存储中更新密钥。