Существует (почти) недокументированный способ использования API-интерфейса Digital Twins без потока «от имени». Я использую его для автоматизированных задач, чтобы манипулировать содержимым ADT или предоставлять определенным приложениям доступ к данным только для чтения. Все начинается с назначения роли. Посмотрите этот фрагмент из YAML, который я использую для подготовки своего экземпляра ADT при первом его создании.
- roleId: 98e44ad7-28d4-4007-853b-b9968ad132d1 # Space Administrator
objectId: abcd1234-5556-44a2-1234-402dbd999619 # Service Principal object ID
objectIdType: ServicePrincipalId
tenantId: 1234567-8901-2345-abcd-123456789 # Azure subscription tenant
Тип объекта ServicePrincipalId описан на этой странице , но никогда нигде не упоминается образцов снова. Этот фрагмент дает администратору пространства права на участника службы. Затем вы можете использовать секрет клиента для получения токена доступа, который позволит вам получить доступ к ADT. При регистрации приложения для ADT в вашей Azure Active Directory, go до Сертификаты и секреты и создайте новый секрет клиента.
Следующим шагом является получение objectId субъекта службы, это , а не objectId регистрации приложения. Когда вы go перейдете на вкладку Обзор регистрации вашего приложения, вы можете скопировать идентификатор приложения и выполнить следующую команду в облачной консоли:
az ad sp show --id {the id you copied}
Это покажет много подробностей о вашем Принципале обслуживания, включая возражал. Скопируйте это также. Почти, чтобы получить токен доступа, вам нужно 4 вещи:
- Полномочия: https://login.microsoftonline.com/ {ваш идентификатор клиента}
- ClientId: идентификатор приложения регистрация вашего приложения.
- ClientSecret: созданный вами секрет клиента.
- DigitalTwinsAppId: это всегда 0b07f429-9f4b-4714-9392-cc5e8e80c8b0
Получение доступа Токен в. NET Core
var authContext = new AuthenticationContext({Authority});
var clientCredential = new ClientCredential({ClientId}, {ClientSecret});
var result = await authContext.AcquireTokenAsync({DigitalTwinsAppId}, clientCredential);
return result.AccessToken;
Добавьте это к своим заголовкам (пример HttpClient ниже), и вы хороши для go!
httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);