You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于ASP Data Protection实现自定义JWT签发?

基于ASP Core内置密钥轮换机制签发/验证自定义JWT令牌

我需要让ASP应用自行签发JWT令牌,为未认证用户授权特定操作。例如开放一个未认证端点用于创建实体,另一个认证端点用于编辑该实体;创建端点返回的令牌可用于同一客户端的编辑请求认证。

在ASP Core中,使用IDataProtector生成加密字符串非常简单:

IDataProtector dataProtector = ...; // 通过依赖注入获取

// 创建令牌
var token = dataProtector.Protect(createdEntityId.ToString());

...

// 验证令牌
var editingEntityId = dataProtector.Unprotect(token);

但我在多个场景都需要类似模式,且应用其他部分使用AAD认证,因此希望返回的令牌采用JWT格式——这样调试更便捷(内容无需加密),也能与现有认证体系保持一致。本质上,我需要生成带有任意声明的签名JWT。

我找到了不少相关资源,但存在两类典型问题:

  • 部分方案依赖ASP Identity和UserManager<T>,但我的应用不涉及用户账户,无法使用;
  • 几乎所有方案都依赖手动管理的密钥(存储在配置或密钥保管库等位置)。

我尚未找到利用ASP Core内置轮换密钥管理(IKeyManager、IDataProtector等)实现该需求的方案。这些组件似乎可作为SecurityKey的核心基础,但我尚未找到可行的利用方式。

虽然可以将任意数据(甚至硬编码数据)通过IDataProtector加密后,作为密钥传入SymmetricSecurityKey,但当IDataProtector密钥轮换后,我无法验证旧令牌。

这似乎是一个常见需求,甚至应有官方框架支持,但经过大量搜索后仍未找到解决方案。我想到的最佳方案是使用IKeyManager.GetAllKeys()加密静态字节数组,再将加密结果作为密钥构建SymmetricSecurityKey实例来签名和验证JWT,但该方案看起来不够合理,我尚未测试其可行性。


内容的提问来源于stack exchange,提问作者Matthew Haugen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:22:56