无法在Azure应用程序清单中更新KeyCredential“值”

时间:2017-01-19 01:02:20

标签: azure azure-web-sites azure-active-directory azure-functions azure-app-api

尝试更新Azure AD应用程序的清单文件时,收到以下错误:

“无法保存清单。错误详情:KeyValueMustBeNull”(see screen shot

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

谢谢! : - )

3 个答案:

答案 0 :(得分:3)

虽然上面链接的说明与此类似,但我会尝试按照these说明操作,因为他们过去曾尝试将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.   
  3. 打开“证书”MMC管理单元并连接到您的用户帐户。在“个人”文件夹中找到新证书并将其导出   到base64编码的CER文件。

  4.         

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

         

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

         

    注意:以下说明显示使用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的值   用于下一步。

         

    步骤2:通过清单文件上传证书

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

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

    4.   
    5. 通过Azure管理门户

    6. 下载应用程序清单文件   
    7. 使用以下JSON替换空的“KeyCredentials”:[],属性。注意: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”
      
       }
      
       ],
      
    8.         

      e.g。

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

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

      4.   
      5. 可选:再次下载清单,并在应用程序中看到您的X.509证书。

      6.   

如果您在执行这些步骤后仍然遇到相同的错误,请告诉我。

答案 1 :(得分:0)

这是一个旧线程,但我遇到了这个问题并且修复了我正在尝试更新customKeyIdentifier。显然Azure不喜欢这样,因为他们保存的密钥不匹配。

我刚刚将keyCredentials复制出来并使用keyCredentials保存清单,然后将值重新放入以确保更改keyID字段中的GUID。

你可能只是改变了GUID。

答案 2 :(得分: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。