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

使用Azure Key Vault的EC密钥执行ES256签名请求遇400错误

解决Azure Key Vault EC密钥签名请求的400错误问题

问题核心

Azure Key Vault的Sign API(ES256算法)要求请求体中的value是待签名内容的SHA-256哈希值,且需做base64url编码。你之前直接传入JWT的header.payload或payload的base64url,不符合API要求,导致错误。

正确操作步骤

1. 准备待签名的原始内容

比如你要签的JWT格式内容:header.payload,代码示例:

using Microsoft.IdentityModel.Tokens;

string header = "{\"alg\": \"ES256\"}";
string payload = "{\"keyA\":\"value1\",\"keyB\":\"value2\",\"keyC\": \"value3\"}";
string contentToSign = Base64UrlEncoder.Encode(header) + "." + Base64UrlEncoder.Encode(payload);

2. 计算SHA-256哈希

对上述内容计算SHA-256哈希,得到标准32字节的二进制数据:

using System.Security.Cryptography;

byte[] contentBytes = System.Text.Encoding.UTF8.GetBytes(contentToSign);
byte[] sha256Hash;
using (SHA256 sha256 = SHA256.Create())
{
    sha256Hash = sha256.ComputeHash(contentBytes);
}

3. 对哈希值做base64url编码

将32字节的哈希值用base64url编码,得到符合要求的value参数:

string value = Base64UrlEncoder.Encode(sha256Hash);

4. 构造正确的请求体

最终请求体JSON格式如下:

{
  "alg": "ES256",
  "value": "替换为上面生成的base64url编码哈希值"
}

错误原因解析

  • 第一次错误:直接传入header.payload的base64url,这不是哈希值,完全不符合API对value的定义
  • 第二次错误:传入payload的base64url,解码后是原始payload的字节数据(并非32字节的SHA-256哈希),长度不匹配ES256算法的要求

内容的提问来源于stack exchange,提问作者Brânica

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:03:23