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

调用MS Graph API上传证书失败,更新Azure AD注册应用证书报错

Azure AD应用续期证书MS Graph API调用解决方案

报错根因说明

你遇到的"key value cannot be null or empty"错误是因为构造keyCredentials参数时,key字段没有传入合法的证书公钥内容。这里的key字段与你查询现有证书返回的空值字段、OpenSSL读取的证书内置key属性无关联,是API要求传入的公钥编码值,需要自行从本地证书文件提取。

正确REST API调用步骤

步骤1:提取证书公钥的Base64编码

使用OpenSSL处理本地公钥证书(.cer/.pem格式),执行命令得到无换行的Base64编码串:
openssl base64 -in your_cert.cer -A
注意:需要手动去掉输出结果前后的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----标记,只保留中间的编码内容

步骤2:构造PATCH请求

请求地址:PATCH https://graph.microsoft.com/v1.0/applications/{目标应用的对象ID}
请求头必填参数:

  • Authorization: Bearer {拥有Application.ReadWrite.All权限的访问令牌}
  • Content-Type: application/json
    请求体说明:

必须先调用GET接口拉取该应用现有keyCredentials数组,将新证书配置追加到数组中再提交,否则会覆盖原有所有证书导致业务不可用

{
  "keyCredentials": [
    // 这里保留GET接口返回的所有原有证书配置
    {
      "type": "AsymmetricX509Cert",
      "usage": "Verify",
      "key": "步骤1得到的Base64编码串",
      "displayName": "自定义证书名称",
      "startDateTime": "2024-01-01T00:00:00Z",
      "endDateTime": "2025-01-01T00:00:00Z",
      "keyId": "自行生成的GUID,用于标识该证书"
    }
  ]
}

常用SDK调用示例(C# Microsoft Graph SDK v5)

  1. 初始化GraphServiceClient实例(已配置好身份认证)
  2. 读取证书并构造请求:
// 读取本地公钥证书字节
byte[] certBytes = File.ReadAllBytes("your_public_cert.cer");
// 构造新凭证对象
KeyCredential newCert = new KeyCredential
{
    Type = "AsymmetricX509Cert",
    Usage = "Verify",
    Key = certBytes,
    DisplayName = "2024-2025业务续期证书",
    StartDateTime = new DateTimeOffset(2024,1,1,0,0,0,TimeSpan.Zero),
    EndDateTime = new DateTimeOffset(2025,1,1,0,0,0,TimeSpan.Zero),
    KeyId = Guid.NewGuid()
};
// 拉取现有凭证,避免覆盖
var application = await graphClient.Applications["你的应用对象ID"].GetAsync();
var allKeyCreds = application.KeyCredentials.ToList();
allKeyCreds.Add(newCert);
// 提交更新
await graphClient.Applications["你的应用对象ID"].PatchAsync(new Application
{
    KeyCredentials = allKeyCreds
});

注意事项

  • keyId字段为自定义唯一标识,不需要从证书中读取,自行生成合法GUID即可
  • 证书有效期必须和实际证书的生效、过期时间保持一致,否则会出现上传成功但无法使用的问题
  • 如果需要同时删除过期证书,只需要在提交的keyCredentials数组中移除对应证书的配置项即可

内容的提问来源于stack exchange,提问作者Ayush Ujjwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:48:02