У меня есть функция в Azure, в которой включен MSI (управляемая идентификация службы), которую я пытаюсь использовать для доступа к веб-интерфейсу на основе Azure (веб-приложение службы приложений), в котором, в свою очередь, включена аутентификация Azure AD (все тот же каталог Azure).
В моем WebAPI зарегистрировано приложение Azure, поэтому оно может использовать аутентификацию AAD.
Это приложение также имеет необходимые AppRoles, настроенные в его манифесте (для типов «Пользователь» и «Приложение»).
Я также подтвердил, что удостоверение функций (приложение) было успешно создано в Azure AD, когда я включил MSI для функции.
Когда я пытаюсь получить токен в своей функции с помощью MSI, я получаю ответ / ошибку 400 Bad Request:
ExceptionMessage: AADSTS50105: приложению '###' не назначена роль для приложения '###'
Код ошибки: invalid_grant
Я убедился, что значение ресурса, которое я передаю, является URI идентификатора моего приложения webAPIs.
string resource = "<My App URI>";
string apiversion = "2017-09-01";
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Secret", Environment.GetEnvironmentVariable("MSI_SECRET"));
var r = await client.GetAsync(String.Format("{0}/?resource={1}&api-version={2}", Environment.GetEnvironmentVariable("MSI_ENDPOINT"), resource, apiversion));
return r;
Но я все равно получаю ту же ошибку. Код для запроса токена в порядке, и ошибка действительно указывает на проблему с разрешениями.
Единственное, что я не смог сделать (и я предполагаю, что это проблема), так это найти способ добавить новый идентификатор MSI / функции для пользователей и групп приложения Azure webAPI. Независимо от того, что я пробую, мое удостоверение приложения с функциями не отображается в списке пользователей, когда я ищу его для добавления в качестве члена приложения webAPI (с ролью приложения).
Есть ли у кого-нибудь предложения относительно того, почему я не могу добавить MSI-файл функций в группу «Пользователи и группы приложений» или в группу Azure AD?
Или, может быть, я еще что-то делаю не так?
New-AzureADServiceAppRoleAssignment -ObjectId 'a' -Id 'a' -PrincipalId 'a' -ResourceId 'a'
. Я думаюObjectId
может быть случайным GUID, например[System.Guid]::NewGuid().ToString()
.Id
должен быть идентификатором приложения.PrincipalId
должен быть objectId участника службы функции.ResourceId
должен быть objectId участника службы API. Дайте мне знать, если это сработает: D - person juunas   schedule 04.04.2018