c# - 使用数据保护 API 作为 JWT 的密钥管理器
问题描述
我使用 JWT 作为访问令牌的容器,并希望添加签名密钥的轮换。我发现 Data Protection API 提供了开箱即用的功能。
虽然 DP API 是(对称)加密/解密数据的接口,但 JWT 应该是签名的,因此它们最初是不兼容的。
有这样的流程是否安全:
- JWT
kid
存储来自 DP API 的 Key Id - DP API 根据时间策略自动轮换密钥
- JWT 使用自定义
IssuerSigningKeyResolver
按kid
值从 DP API 检索原始密钥
这意味着所有现有/过期的密钥都可用于验证任何令牌。要使令牌无效,可以从 DP API 密钥环中撤销/删除密钥。
分布式应用程序的自定义失效逻辑:在令牌验证错误时重新加载密钥环,因此实例可以获得另一个实例生成的最新密钥。
我的担忧:
- 微软不建议直接使用 IKeyManager
Developers should very rarely (if ever) need to use the key management APIs directly
但我不确定它与密钥访问而不是轮换管理有关 2. 在kid
JWT 标头中公开密钥 id。我在这里没有看到安全问题,但这并不意味着没有这样的 3. 没有简单的方法来访问密钥缓冲区
有没有人尝试做类似的事情?密钥轮换/管理是否有简单的策略?
解决方案
推荐阅读
- linux - linux:在每个输出行的末尾打印字符串
- bash - Bash 脚本的行为出乎意料/奇怪
- node.js - 在生产环境中部署 Outlook Web 插件?
- javascript - Discord.js 关卡系统
- python-3.x - 如何尝试文件中的行是否与Python中其他文件中的行匹配
- android - Inside of Worker class call BroadcastReceiver class
- c# - 如何从另一个列表中的列表中获取总和作为带有 linq 的属性
- r - 有没有办法在不下载所有 HTML 的情况下运行 Rcrawler?
- javascript - 将属性映射到另一个属性中的对应值
- logstash - Logstash 中的 Foreach 消息