如何将颁发者签名密钥存储在Key Vault并通过APIM策略验证JWT?
实现步骤
1. 在Azure Key Vault中存储签名密钥
- 登录Azure门户,进入你的Key Vault实例
- 左侧菜单选择「机密」,点击「生成/导入」
- 填写机密名称(比如
jwt-signing-key),将签名密钥值填入「值」字段,按需配置其他选项后点击「创建」 - 配置Key Vault访问权限:
- 给APIM实例分配系统分配身份:进入APIM实例 → 「身份」→ 「系统分配」→ 开启状态,保存后复制生成的对象ID
- 回到Key Vault → 「访问策略」→ 「添加访问策略」
- 权限选择「机密权限」下的「获取」,主体选择刚才复制的APIM身份对象ID,完成添加
2. 在APIM中配置Key Vault机密引用
- 进入APIM实例 → 「机密」→ 「添加」
- 选择「从Key Vault导入」,目标Key Vault实例,再选中刚创建的
jwt-signing-key机密,点击「创建」
3. 修改APIM验证JWT策略
替换原硬编码密钥的策略,改为引用Key Vault机密的版本:
<policies> <inbound> <base /> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized"> <issuer-signing-keys> <key>{{jwt-signing-key}}</key> </issuer-signing-keys> <!-- 可选:按需添加颁发者、受众验证规则 --> <!-- <audiences> <audience>你的受众标识</audience> </audiences> <issuers> <issuer>你的颁发者地址</issuer> </issuers> --> </validate-jwt> </inbound> </policies>
灵活处理方案:先获取密钥再验证
如果需要动态选择密钥等场景,可先通过get-secret将密钥存入变量,再在验证逻辑中引用:
<policies> <inbound> <base /> <get-secret secret-identifier="https://你的密钥保管库名称.vault.azure.net/secrets/jwt-signing-key" output-variable-name="jwtKey" /> <validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized"> <issuer-signing-keys> <key>@((string)context.Variables["jwtKey"])</key> </issuer-signing-keys> </validate-jwt> </inbound> </policies>
4. 测试验证
- 调用API时携带有效JWT令牌,APIM会自动从Key Vault拉取签名密钥完成验证
- 若令牌无效或密钥无法正常获取,将返回401 Unauthorized错误
内容的提问来源于stack exchange,提问作者technocraft
相关产品推荐
相关产品推荐

