Ошибка "Недостаточно прав" при использовании действия "addKey" в Azure AD Graph API
У меня есть приложение, зарегистрированное в Azure AD, которое использует сертификаты. Я пытаюсь написать скрипт, который бы добавил новый сертификат в приложение. Это может быть использовано для добавления нового сертификата, когда срок его действия истекает.
Я пытаюсь использовать функцию AddKey API Azure AD Graph. Тело запроса этого API в качестве параметра 'proof', являющегося утверждением JWT, подписанным существующим сертификатом приложения. В документе говорится, что для утверждения "aud" в JWT должно быть установлено "AAD Graph SPN". Вот что означает "AAD Graph SPN"?
Я попытался с JWT, где "aud" был установлен в "00000002-0000-0000-c000-000000000000". Но я получаю следующую ошибку,
{
"odata.error": {
"code":"Authorization_RequestDenied",
"message":{
"lang":"en",
"value":"Insufficient privileges to complete the operation."
}
}
}
Есть мысли по этому поводу?
Я получаю маркер доступа для вызова API-интерфейса Azure AD Graph с помощью потока " Предоставление учетных данных владельца ресурса". Чтобы получить токен доступа, я использую client_id "1950a258-227b-4e31-a9cf-717495945fc2" (общеизвестный идентификатор клиента для Azure PowerShell")
Мой скрипт (для целей развертывания) делает что-то вроде ниже,
i) Получите токен доступа, как описано выше, и зарегистрируйте новое приложение в Azure AD с начальным сертификатом.
ii) Когда истекает срок действия первоначального сертификата, он должен добавить новый сертификат в созданное приложение.
1 ответ
Согласно документации, вы должны использовать самоподписанный токен JWT для доступа к этому API:
Как часть проверки запроса для этого действия службы, до выполнения действия проверяется доказательство владения существующим ключом. Доказательство представляет собой самозаверяющий токен JWT. Запрашивающее приложение должно сгенерировать самоподписанный токен JWT со следующими требованиями...
В этой ситуации "Грант на получение полномочий владельца ресурса" не будет работать. Вместо этого используйте "Предоставление учетных данных клиента":
Приложение, которое вы хотите обновить, должно быть идентификатором клиента, используемым для получения этого токена доступа.
Другой вариант - обновить приложение напрямую, используя PATCH
запрос на объект приложения:
https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/entity-and-complex-type-reference
Используя этот метод, вы сможете выполнить обновление, используя метод, который вы описали выше (учетные данные пользователя и внешний идентификатор клиента)
Позвольте мне знать, если это помогает.