Azure: идентификатор участника службы и идентификатор приложения - PullRequest
0 голосов
/ 07 января 2019

Согласно этой документации : Принцип применения и обслуживания, безусловно, две разные вещи. Приложение - это глобальная идентификация и принцип обслуживания на Арендатора / AAD

Но Эта документация и Этот вопрос о переполнении стека предполагает, что они одинаковы.

Чтобы сделать это более запутанным, когда я использовал Graph API (из первой ссылки) и запросил имя моего приложения:

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'

Я вижу идентификатор объекта, идентификатор приложения (который, как я думал, был одним и тем же), но нет идентификатора участника службы в Json

Какая связь между AppID и ServicePrincipalID (и ClientID, ObjectID)? Спасибо.

1 Ответ

0 голосов
/ 07 января 2019

Короткий ответ : Принцип приложения и службы - это, безусловно, две разные вещи (связанные в 1: много модных, но определенно разных объектов).

Работа с API-интерфейсом Azure AD Graph

Поиск приложения. Как вы уже упоминали в вопросе.

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'

Поиск руководителя службы

https://graph.windows.net/<tenantName>/servicePrincipals?api-version=1.6&$filter=displayName eq '<Apllication Name>'

Мелочи, которые нужно заметить в json:

  1. objectId и objectType будут отличаться для объекта приложения и объекта субъекта службы, которые вы получаете от вышеупомянутых запросов.
  2. Свойства типа appId и displayName одинаковы, поскольку они связаны с одним и тем же логическим приложением.

Ваш вопрос о том, какова связь между AppID и ServicePrincipalID (и ClientID, ObjectID)

Во-первых, ссылка в вашем вопросе Объекты субъекта приложения и службы в Azure Active Directory - отличный ресурс для понимания концепций. Я не буду лучше, чем эта документация, объяснять концепции, поэтому, если нужно, прочитайте ее несколько раз. Я постараюсь выделить некоторую информацию, чтобы ответить на ваши конкретные вопросы, хотя.

Вы можете рассматривать объект приложения, который вы извлекли из API-интерфейса Azure AD Graph выше (или см. В разделе «Регистрация приложений» портала Azure> Azure Active Directory), как единственное и основное определение разрабатываемого вами программного приложения и регистрация в Azure AD в целях идентификации. ПРИМЕЧАНИЕ. В случае мультитенантных приложений этот объект приложения можно найти только в «домашнем» клиенте, где приложение было зарегистрировано в Azure AD.

Участник службы (то, что вы видите в разделе Корпоративные приложения портала Azure> Azure Active Directory), с другой стороны, создается в каждом клиенте Azure AD, который хочет использовать это приложение. Для «домашнего» арендатора принципал службы создается во время регистрации приложения, для всех остальных арендаторов принципал создается в момент согласия.

Таким образом, всегда будет только 1 объект приложения для представления приложения. Во время регистрации приложения будет создан как минимум 1 участник службы. Хотя, когда вы начнете использовать мультитенантное приложение от нескольких арендаторов, для каждого нового арендатора Azure AD будет создан 1 участник службы, где пользователь дает согласие на приложение. Следовательно, отношение между приложением и объектом субъекта службы становится равным 1: много

  • appId будет одинаковым для одного объекта приложения, представляющего это приложение, а также для всех участников службы, созданных для этого приложения.
  • objectId будет уникальным значением для объекта приложения и каждого участника службы. Это однозначно определяет объект в Azure AD. Это свойство вы найдете во всех объектах Azure AD, таких как пользователь, группа или что-либо еще в Azure AD.
  • clientId будет таким же, как appId. Это будет актуально в контексте, например, получения токена с использованием одного из потоков OAuth, которые поддерживает Azure AD (например, при написании кода с использованием библиотек ADAL или с помощью API REST для достижения конечных точек токена Azure AD). Это не прямое свойство, которое вы найдете с таким точным именем для объекта приложения или субъекта службы.

Кстати, две другие ссылки, которые вас смутили, - это скорее статья «Как писать статьи, пытающаяся выполнить работу», чем глубокое объяснение понятий, которые вы ищете. Я не думаю, что какая-либо документация прямо скажет, что приложение и принципал службы - это одно и то же (поскольку технически это не так). Хотя я могу понять, как иногда это может сбить с толку, когда приложение и субъект-служба используются взаимозаменяемо, когда свободно ссылаются на приложение в контексте задач, связанных с аутентификацией.

Вот еще один SO пост на аналогичную тему с хорошим ответом от Жан-Марк Приер . Он может не отвечать на все ваши конкретные вопросы, но, безусловно, попадает в концепцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...