Как получить доступ к azure digital twin API с помощью Service Principal? - PullRequest
0 голосов
/ 23 апреля 2020

Мой вариант использования - всякий раз, когда я получаю триггер от Cosmos DB в Azure функциях, мне нужно взаимодействовать с Azure цифровыми API-интерфейсами-близнецами без какого-либо взаимодействия с человеком.
Из приведенной ниже ссылки я понял, что мы можем использовать субъект обслуживания для его достижения.
Можно ли настроить Azure доступ к API Digital Twins для приложения Daemon?

Но я не не знает, как аутентифицировать принципала обслуживания с помощью API-интерфейсов для цифровых твинов.
1) Какой тип аутентификации требуется и каким будет поток?
2) Если это Oauth2, каков тип предоставления и область для доступа к цифровому близнец?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Существует (почти) недокументированный способ использования 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 до Сертификаты и секреты и создайте новый секрет клиента. enter image description here

Следующим шагом является получение objectId субъекта службы, это , а не objectId регистрации приложения. Когда вы go перейдете на вкладку Обзор регистрации вашего приложения, вы можете скопировать идентификатор приложения и выполнить следующую команду в облачной консоли:

az ad sp show --id {the id you copied}

Это покажет много подробностей о вашем Принципале обслуживания, включая возражал. Скопируйте это также. Почти, чтобы получить токен доступа, вам нужно 4 вещи:

  1. Полномочия: https://login.microsoftonline.com/ {ваш идентификатор клиента}
  2. ClientId: идентификатор приложения регистрация вашего приложения.
  3. ClientSecret: созданный вами секрет клиента.
  4. 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);
0 голосов
/ 23 апреля 2020

1) Какой тип аутентификации требуется и как будет проходить поток?

В качестве поста, на который вы ссылались, вы должны использовать OAuth 2.0 On-Behalf- Потока . Основной поток здесь: Вызов цифровых близнецов из веб-API среднего уровня .

2) Если это Oauth2, каков тип гранта и область для доступа к цифровому близнецу ?

Вы можете сослаться на этот образец :

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer

А для scope это должен быть API-интерфейс цифрового близнеца, к которому вы хотите получить доступ. (например, пространства, устройства, пользователи или датчики). См. Сводка API .

...