尝试更新 Azure AD 应用程序的清单文件时,我收到以下错误(请参见屏幕截图):
未能保存清单。错误详情:KeyValueMustBeNull"
我正在尝试更新清单中 keyCredentials 的“值”属性,但它不允许我这样做。它会让我上传一个带有值集的清单,但随后它会清除它并将其重置为空。我在新的 Azure 门户和旧的管理门户上都重复了这个问题。
我该如何解决?
尝试更新 Azure AD 应用程序的清单文件时,我收到以下错误(请参见屏幕截图):
未能保存清单。错误详情:KeyValueMustBeNull"
我正在尝试更新清单中 keyCredentials 的“值”属性,但它不允许我这样做。它会让我上传一个带有值集的清单,但随后它会清除它并将其重置为空。我在新的 Azure 门户和旧的管理门户上都重复了这个问题。
我该如何解决?
虽然您在上面链接的说明与此类似,但我会尝试按照这些说明进行操作,因为它们过去在尝试将Certificated添加到我的应用程序时对我有用。
请注意,这使用的是旧的 Azure 管理门户,而不是您正在使用的新的 Azure 门户。
第 0 步:(如果您还没有 X.509 证书)创建自颁发的证书
您可以使用 makecert.exe 工具轻松生成自颁发证书。
从命令行运行: makecert -r –pe -n “CN=MyCompanyName MyAppName Cert” -b 12/15/2014 -e 12/15/2016 –ss my –len 2048
打开证书 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 的值,以便在下一步中使用。
第二步:通过清单文件上传证书
登录 Azure 管理门户 ( https://manage.windowsazure.com )
转到 AAD 管理单元,然后导航到要使用 X.509 证书配置的应用程序
通过 Azure 管理门户下载应用程序清单文件
将空的“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” } ],
将更改保存到应用程序清单文件。
通过 Azure 管理门户上传编辑后的应用程序清单文件。
可选:再次下载清单,并查看您的 X.509 证书是否存在于应用程序中。
让我知道在这些步骤之后您是否仍然遇到相同的错误。
我遇到了这个问题,解决方法是我试图更新 customKeyIdentifier。显然 Azure 不喜欢这样,因为他们保存的密钥不匹配。
我刚刚复制了 keyCredentials 并将清单保存为 keyCredentials 空白,然后将值放回以确保更改 keyID 字段中的 GUID。
不过,您可能只需要更改 GUID。
我使用 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。