6

尝试更新 Azure AD 应用程序的清单文件时,我收到以下错误(请参见屏幕截图):

未能保存清单。错误详情:KeyValueMustBeNull"

我正在尝试更新清单中 keyCredentials 的“值”属性,但它不允许我这样做。它会让我上传一个带有值集的清单,但随后它会清除它并将其重置为空。我在新的 Azure 门户和旧的管理门户上都重复了这个问题。

我该如何解决?

4

3 回答 3

3

虽然您在上面链接的说明与此类似,但我会尝试按照这些说明进行操作,因为它们过去在尝试将Certificated添加到我的应用程序时对我有用。

请注意,这使用的是旧的 Azure 管理门户,而不是您正在使用的新的 Azure 门户。

第 0 步:(如果您还没有 X.509 证书)创建自颁发的证书

您可以使用 makecert.exe 工具轻松生成自颁发证书。

  1. 从命令行运行: makecert -r –pe -n “CN=MyCompanyName MyAppName Cert” -b 12/15/2014 -e 12/15/2016 –ss my –len 2048

  2. 打开证书 MMC 管理单元并连接到您的用户帐户。在 Personal 文件夹中找到新证书并将其导出为 base64 编码的 CER 文件。

注意:生成 X.509 证书时,请确保密钥长度至少为 2048。较短的密钥长度不被接受为有效密钥。

第 1 步:使用 PowerShell 从 .cer X509 公共证书文件中获取 base64 编码的证书值和指纹

注意:以下说明显示使用 Windows PowerShell 获取 x.509 证书的属性。其他平台提供了类似的工具来检索证书的属性。

$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2

$cer.Import(“mycer.cer”)

$bin = $cer.GetRawCertData()

$base64Value = [System.Convert]::ToBase64String($bin)

$bin = $cer.GetCertHash()

$base64Thumbprint = [System.Convert]::ToBase64String($bin)

$keyid = [System.Guid]::NewGuid().ToString()

存储 $base64Thumbprint、$base64Value 和 $keyid 的值,以便在下一步中使用。

第二步:通过清单文件上传证书

  1. 登录 Azure 管理门户 ( https://manage.windowsazure.com )

  2. 转到 AAD 管理单元,然后导航到要使用 X.509 证书配置的应用程序

  3. 通过 Azure 管理门户下载应用程序清单文件

  4. 将空的“KeyCredentials”:[],属性替换为以下 JSON。注意:此处记录了 KeyCredentials 复杂类型:http: //msdn.microsoft.com/en-us/library/azure/dn151681.aspx

     “keyCredentials“: [
    
     {
    
       “customKeyIdentifier“: “$base64Thumbprint_from_above”,
    
       “keyId“: “$keyid_from_above“,
    
       “type”: “AsymmetricX509Cert”,
    
       “usage”: “Verify”,
    
       “value”:  “$base64Value_from_above”
    
      }
    
      ],
    

    例如

     “keyCredentials“: [
    
     {
    
       “customKeyIdentifier“: “ieF43L8nkyw/PEHjWvj+PkWebXk=”,
    
       “keyId“: “2d6d849e-3e9e-46cd-b5ed-0f9e30d078cc”,
    
       “type”: “AsymmetricX509Cert”,
    
       “usage”: “Verify”,
    
       “value”: “MIICWjCCAgSgAwIBA***omitted for brevity***qoD4dmgJqZmXDfFyQ”
    
     }
    
     ],
    
  5. 将更改保存到应用程序清单文件。

  6. 通过 Azure 管理门户上传编辑后的应用程序清单文件。

  7. 可选:再次下载清单,并查看您的 X.509 证书是否存在于应用程序中。

让我知道在这些步骤之后您是否仍然遇到相同的错误。

于 2017-01-19T01:21:03.303 回答
0

我遇到了这个问题,解决方法是我试图更新 customKeyIdentifier。显然 Azure 不喜欢这样,因为他们保存的密钥不匹配。

我刚刚复制了 keyCredentials 并将清单保存为 keyCredentials 空白,然后将值放回以确保更改 keyID 字段中的 GUID。

不过,您可能只需要更改 GUID。

于 2017-10-20T17:09:08.777 回答
0

我使用 PowerShell 上传证书详细信息。它对我有用。打开 PowerShell 窗口并尝试以下命令。

Install-Module AzureAD
Connect-AzureAD

最后一个命令将要求提供凭据。

$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate
$cer.Import("Yourcertpath\cername.cer")
$binCert = $cer.GetRawCertData()
$credValue = [System.Convert]::ToBase64String($binCert)
New-AzureADApplicationKeyCredential -ObjectId 46xxx45e-xxxx-xxx-xxxx-xxxxxxxxxxx -Type AsymmetricX509Cert -Value $credValue -Usage Verify

请记住将对象 ID 替换为您的AD应用程序的对象 ID。

于 2018-07-19T07:15:10.837 回答