首页 > 解决方案 > 使用数据保护 API 作为 JWT 的密钥管理器

问题描述

我使用 JWT 作为访问令牌的容器,并希望添加签名密钥的轮换。我发现 Data Protection API 提供了开箱即用的功能。

虽然 DP API 是(对称)加密/解密数据的接口,但 JWT 应该是签名的,因此它们最初是不兼容的。

有这样的流程是否安全:

  1. JWTkid存储来自 DP API 的 Key Id
  2. DP API 根据时间策略自动轮换密钥
  3. JWT 使用自定义IssuerSigningKeyResolverkid值从 DP API 检索原始密钥

这意味着所有现有/过期的密钥都可用于验证任何令牌。要使令牌无效,可以从 DP API 密钥环中撤销/删除密钥。

分布式应用程序的自定义失效逻辑:在令牌验证错误时重新加载密钥环,因此实例可以获得另一个实例生成的最新密钥。

我的担忧:

  1. 微软不建议直接使用 IKeyManager
Developers should very rarely (if ever) need to use the key management APIs directly

但我不确定它与密钥访问而不是轮换管理有关 2. 在kidJWT 标头中公开密钥 id。我在这里没有看到安全问题,但这并不意味着没有这样的 3. 没有简单的方法来访问密钥缓冲区

有没有人尝试做类似的事情?密钥轮换/管理是否有简单的策略?

标签: c#security.net-corejwtdpapi

解决方案


推荐阅读