Получение существующего субъекта-службы
Вывод списка субъектов-служб
Если у вас уже есть существующий субъект-служба, который вы хотите использовать, на этом шаге объясняется, как получить существующий субъект-службу.
Список субъектов-служб в клиенте можно получить с помощью команды 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"
Дальнейшие действия
Теперь, когда вы узнали, как получить существующий субъект-службу, перейдите к следующему шагу, чтобы узнать, как управлять ролями субъекта-службы.