Не удается обновить KeyCredential 'Value' в манифесте приложения Azure

При попытке обновить файл манифеста моего приложения Azure AD я получаю следующую ошибку (см. Снимок экрана):

Не удалось сохранить манифест. Сведения об ошибке: KeyValueMustBeNull

Я пытаюсь обновить атрибут Value keyCredentials в манифесте, но это не позволяет мне это сделать. Это позволит мне загрузить манифест с установленным значением, но затем он стирает его и сбрасывает обратно на null. Я продублировал эту проблему как на новом портале Azure, так и на старом портале управления.

Как я могу это исправить?




Ответы (3)


Хотя приведенные выше инструкции выглядят примерно так, я бы попробовал выполнить эти инструкции, поскольку они работали у меня в прошлом, когда я пытался добавить Сертифицированный в мое приложение.

Обратите внимание, что здесь используется старый портал управления Azure, а не новый портал Azure, который, похоже, вы используете.

Шаг 0: (Если у вас еще нет сертификата X.509) Создайте самостоятельно выданный сертификат

Вы можете легко создать самостоятельно выданный сертификат с помощью инструмента makecert.exe.

  1. В командной строке выполните: makecert -r –pe -n «CN = MyCompanyName MyAppName Cert» -b 15.12.2014 -e 15.12.2016 –ss my –len 2048

  2. Откройте оснастку Certificates MMC и подключитесь к своей учетной записи. Найдите новый сертификат в папке Personal и экспортируйте его в файл CER с кодировкой base64.

Примечание. Убедитесь, что длина ключа не менее 2048 при создании сертификата X.509. Более короткие ключи не принимаются в качестве действительных ключей.

Шаг 1. Получите значение сертификата в кодировке base64 и отпечаток из общедоступного файла сертификата .cer X509 с помощью PowerShell

Примечание. В приведенных ниже инструкциях показано использование 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. Перейдите в оснастку 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”
    
      }
    
      ],
    

    E.g.

     “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 присутствует в приложении.

Сообщите мне, если после этих действий вы по-прежнему получаете ту же ошибку.

person Shawn Tabrizi    schedule 19.01.2017
comment
Привет, Шон, да, это были инструкции, которым я следовал, когда впервые столкнулся с ошибкой. Я также попытался загрузить манифест, отредактировать и повторно загрузить, а не редактировать на месте, и получил ту же ошибку. - person Tracy; 19.01.2017
comment
Я пробовал использовать как новый портал Azure, так и старый портал управления, и это происходит в обоих из них. Это тоже не связано с моими разрешениями. - person Tracy; 26.01.2017
comment
Я тоже это видел, думаю, это просто плохой дизайн пользовательского интерфейса. После добавления keyCredentials они становятся неизменяемыми и также не отображаются повторно пользователю при повторном открытии манифеста. Но где-то хранится keyId. - person Eric Anderson; 10.03.2017
comment
О, теперь я вижу проблему. Да, когда вы обновляете манифест новым сертификатом, Graph API вернет вам нулевые значения в качестве положительного результата. Когда вы не можете обновить ключевые учетные данные после их сохранения, и значение всегда будет иметь нулевое значение, когда вы попытаетесь его прочитать. - person Shawn Tabrizi; 10.03.2017
comment
Если это просто проблема пользовательского интерфейса, почему тогда значения не отображаются, когда я загружаю файл локально и открываю его? - person Tracy; 22.03.2017
comment
@ShawnTabrizi - Извините, я не совсем понимаю ваш ответ выше. Вы можете уточнить? - person Tracy; 23.03.2017
comment
Это не проблема пользовательского интерфейса, это поведение Graph API. Когда вы запрашиваете ключевые учетные данные в приложении, значение ключевых учетных данных будет намеренно отображаться как Null, даже если там есть данные. - person Shawn Tabrizi; 23.03.2017
comment
@ShawnTabrizi - Извините, что вы имеете в виду «запрос ключевых учетных данных в приложении»? Пытаюсь отредактировать их в файле манифеста. - person Tracy; 23.03.2017
comment
Редактор манифеста - это просто прославленный редактор JSON. Контент, который вы видите в редакторе манифеста, такой же, как если бы вы сделали GET на \applications конечной точке Graph API. Поскольку API-интерфейс Graph не отображает значения для учетных данных ключа (намеренно), редактор манифеста также не отображает никаких значений. Короче говоря, существующие ключевые учетные данные не могут быть ИЗМЕНЕНЫ. Можно добавлять новые, удалять старые. - person Shawn Tabrizi; 23.03.2017

Я столкнулся с этим, и исправление состояло в том, что я пытался обновить customKeyIdentifier. Очевидно, Azure это не нравится, потому что ключ, который они сохранили, не совпадает.

Я просто скопировал keyCredentials и сохранил манифест с пустым keyCredentials, а затем вернул значения, чтобы убедиться, что изменился GUID в поле keyID.

Возможно, вы могли бы просто изменить GUID.

person Poodimizer    schedule 20.10.2017

Я использовал 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

Не забудьте заменить идентификатор объекта идентификатором объекта вашего приложения AD.

person SRIDHARAN    schedule 19.07.2018