.net - 在 key 环中找不到 key 。无法验证 token

标签 .net docker identityserver4

在我的应用程序前面添加 NGNIX 代理后,我在身份服务器 4 上遇到了奇怪的错误。

  • 我的 .net 核心身份服务器正在端口 8080 上的 Docker 容器上运行
  • Ngnix 代理(使用 https://github.com/nginx-proxy/nginx-proxy )配置为将 443 路由到 docker 容器 8080

  • 在回调端点上成功验证后,它无法验证伪造 token 。
    奇怪的部分是整个场景适用于我在 .net 核心应用程序启动时播种的用户。但是对于通过我的 API 创建的新的失败。
    任何想法或教导表示赞赏。

    最佳答案

    由 ASP.NET 核心发布的 session cookie 使用数据保护 API 进行加密。
    用于签署 cookie 的 key 存储在 key 环中。如果您现在重新部署应用程序并且没有正确配置它,那么将在新的 key 环中发布新的加密 key 。
    如果无法找到用于加密 cookie 的 key ,则意味着无法再解密所有客户端浏览器中的现有 session cookie。
    请参阅有关此 API 的 article 和有关如何配置它的 article
    这适用于您的 IdentityServer 和客户端应用程序,因为它们都使用数据保护 API,因此两者都需要有一个永久的 key 环。当您重新部署容器时,除非您将 key 环放置在文件系统上的某个永久卷中或以其他方式将其持久化,否则 key 环将丢失。 API 支持很多地方存储 key 环,包括数据库、redis、Azure Key Vault..

    关于.net - 在 key 环中找不到 key 。无法验证 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63316682/

    相关文章:

    c# - 标识符应具有正确的后缀 (fxcop)

    c# - 使用 ADO.Net 的查询的连接超时异常

    docker - docker-compose up给出错误:bash:sails:找不到命令

    c# - 扩展 IdentityServer4 服务

    c# - Blazor WebAssembly 应用程序/身份验证/注销导致 "There was an error trying to log you out: ' '"失败

    c# - 如何使用 LINQ 实现此目的?

    c# - 在每次应用程序启动时在代码滚动中配置 log4net RollingFileAppender

    docker - Traefik Docker 热重载配置

    docker - `docker run` 作为级长任务

    c# - Identity Server 4 - 注销 - 传递附加数据