【问题标题】:ASP.NET Core Data Protection with Azure Key Vault for containerized app deployment to Azure Kubernetes Service使用 Azure Key Vault 的 ASP.NET Core 数据保护,用于将容器化应用部署到 Azure Kubernetes 服务
【发布时间】:2021-06-22 05:10:03
【问题描述】:

我有一个 ASP.NET Core 应用程序,我以容器化方式将它部署到 Azure Kubernetes 服务 (AKS),并且在仅运行应用程序的单个副本时 - 它可以正常工作并且按预期工作。

但是,当我运行多个副本时 - 我遇到了错误 - “无法保护来自 OIDC 提供程序的 message.State”。 经过进一步研究,我发现使用此处描述的 ASP.NET Core 数据保护是解决方案 - https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-5.0#persisting-keys-when-hosting-in-a-docker-container

但是,在将密钥存储在 Azure Key Vault 中时,上述链接并未扩展其使用模式。假设我已经在 AKV 中保护了我的密钥,我该如何在我的应用程序中实际使用它?有这方面的样本或指导吗?

【问题讨论】:

    标签: asp.net-core asp.net-core-3.1 azure-aks azure-keyvault data-protection


    【解决方案1】:

    首先,我建议使用相同的客户端实例(使用 AddOpenIDConnect(...) 来处理来自身份提供者 (/signin-oidc) 的回调)。它在第一次设置时设置的状态参数将您重定向到身份提供者必​​须与返回的响应匹配(出于安全原因)。

    为确保用户浏览器中发出的 cookie 始终有效,您需要确保:

    1. 所有客户端实例使用相同的数据保护加密密钥
    2. 重新部署时密钥相同。

    例如,您可以将此密钥存储在 Azure Key Vault、SQL-Server 或其他地方。

    顺便说一句,我写了一篇关于数据保护 API here 以及如何在 AKV 中存储密钥环的博文。

    【讨论】:

    • 非常有用。 1. 确保相同的客户端实例——在容器化场景中是否需要做任何明确的事情,比如会话亲和性? 2. 在您的帖子中 - DPkey 以编程方式存储在 KV 中。是否有可能将 DP 密钥手动预存储在 KV 中,并通过 Kubernetes 环境变量让应用程序“使用”它,该环境变量通过从 KV 中拉下秘密来填充?
    • 您分别对待和处理密钥环和密钥保护密钥。因此,在我的博客文章中,您将两者都存储在 AKV 中,即使 Microsoft 出于某种原因不“推荐”,也有 ca 24Kb 大小限制。当您对用户进行身份验证时,可能需要会话亲和性,因为在身份验证流程中,由于 state 参数必须相同,因此 AddOpenIDConnect 部分需要相同。
    • 如果回答了您的问题,请随时接受我的回答。
    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 2021-10-11
    • 2020-08-16
    • 2017-05-10
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多