Получение существующего субъекта-службы

Вывод списка субъектов-служб

Если у вас уже есть существующий субъект-служба, который вы хотите использовать, на этом шаге объясняется, как получить существующий субъект-службу.

Список субъектов-служб в клиенте можно получить с помощью команды az ad sp list. По умолчанию эта команда возвращает первые 100 субъектов-служб для вашего клиента. Чтобы получить все субъекты-службы арендатора, используйте параметр --all. На получение такого списка может потребоваться длительное время, поэтому мы рекомендуем отфильтровать список с помощью следующих параметров:

  • --display-name — запрашивает субъекты-службы с префиксом, который совпадает с указанным именем. Отображаемое имя субъекта-службы представляет собой значение, заданное при создании с помощью параметра --name. Если вы не указали параметр --name при создании субъекта-службы, используется префикс имени azure-cli-.
  • --spn — отфильтровывает точные совпадения имен субъектов-служб. Имя субъекта-службы всегда начинается с https://. Если значение, которое вы использовали для аргумента --name, не было универсальным кодом ресурса (URI), им будет значение https:// с последующим отображаемым именем.
  • --show-mine — запрашивает только те субъекты-службы, которые были созданы пользователем, вошедшим в систему.
  • --filter — выполняет фильтрацию на стороне сервера с использованием фильтра OData. Мы рекомендуем использовать этот метод, а не фильтрацию на стороне клиента с указанием параметра CLI --query. Дополнительные сведения о фильтрах OData см. в статье Синтаксис выражений OData для предложений фильтрации и упорядочивания в службе "Поиск Azure".

Для объектов субъектов-служб возвращаются подробные сведения. Чтобы получить только те сведения, которые нужны для входа, используйте строку запроса [].{id:appId, tenant:appOwnerOrganizationId}. Ниже приведен пример, который получает сведения о входе для всех субъектов-служб, созданных пользователем, вошедшего в систему:

az ad sp list --show-mine --query "[].{SPname:displayName, SPid:appId, tenant:appOwnerOrganizationId}" --output table

Если вы работаете в большой организации со многими субъектами-службами, попробуйте использовать следующие примеры команд:

# get service principals containing a keyword
az ad sp list --display-name mySearchWord --output table

# get service principals using an OData filter
az ad sp list --filter "displayname eq 'myExactServicePrincipalName'" --output json

# get a service principal having a certain servicePrincipalNames property value
az ad sp list --spn https://spURL.com

Важно!

Пользователь и клиент могут быть получены с помощью az ad sp list и az ad sp show, но секреты проверки подлинности или метод проверки подлинности недоступны. Секреты для сертификатов в Azure Key Vault можно получить с помощью az keyvault secret show, но другие секреты по умолчанию не хранятся. Если вы забыли способ аутентификации или секрет, сбросьте учетные данные субъекта-службы.

Свойства субъекта-службы

При получении списка субъектов-служб, использующих, az ad sp listв скрипте можно ссылаться много выходных свойств.

[
  {
    "accountEnabled": true,
    "addIns": [],
    "alternativeNames": [],
    "appDescription": null,
    "appDisplayName": "myServicePrincipalName",
    "appId": "00000000-0000-0000-0000-000000000000",
    "appOwnerOrganizationId": "00000000-0000-0000-0000-000000000000",
    "appRoleAssignmentRequired": false,
    "appRoles": [],
    "applicationTemplateId": null,
    "createdDateTime": null,
    "deletedDateTime": null,
    "description": null,
    "disabledByMicrosoftStatus": null,
    "displayName": "myServicePrincipalName",
    "homepage": "https://myURL.com",
    "id": "00000000-0000-0000-0000-000000000000",
    "info": {
      "logoUrl": null,
      "marketingUrl": null,
      "privacyStatementUrl": null,
      "supportUrl": null,
      "termsOfServiceUrl": null
    },
    "keyCredentials": [],
    "loginUrl": null,
    "logoutUrl": null,
    "notes": null,
    "notificationEmailAddresses": [],
    "oauth2PermissionScopes": [
      {
        "adminConsentDescription": "my admin description",
        "adminConsentDisplayName": "my admin display name",
        "id": "00000000-0000-0000-0000-000000000000",
        "isEnabled": true,
        "type": "User",
        "userConsentDescription": "my user description",
        "userConsentDisplayName": "my user display name",
        "value": "user_impersonation"
      }
    ],
    "passwordCredentials": [],
    "preferredSingleSignOnMode": null,
    "preferredTokenSigningKeyThumbprint": null,
    "replyUrls": [],
    "resourceSpecificApplicationPermissions": [],
    "samlSingleSignOnSettings": null,
    "servicePrincipalNames": [
      "00000000-0000-0000-0000-000000000000",
      "https://myURL.com"
    ],
    "servicePrincipalType": "Application",
    "signInAudience": null,
    "tags": [
      "WindowsAzureActiveDirectoryIntegratedApp"
    ],
    "tokenEncryptionKeyId": null,
    "verifiedPublisher": {
      "addedDateTime": null,
      "displayName": null,
      "verifiedPublisherId": null
    }
  }
]

--query Используйте параметр для получения и хранения свойств субъекта-службы в переменных.

# Bash script
spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:appId}" --output tsv)
tenantID=$(az ad sp list --display-name myServicePrincipalName --query "[].{tenant:appOwnerOrganizationId}" --output tsv)
userConsentDescr=$(az ad sp list --display-name myServicePrincipalName --query "[].{ucs:oauth2PermissionScopes.userConsentDescription[0]}" --output tsv)
echo "Using appId $spID in tenant $tenantID for $userConsentDescr"

Дальнейшие действия

Теперь, когда вы узнали, как получить существующий субъект-службу, перейдите к следующему шагу, чтобы узнать, как управлять ролями субъекта-службы.