Obtenir un principal de service existant

Lister les principaux de service

Si vous disposez déjà d’un principal de service existant que vous souhaitez utiliser, cette étape explique comment le récupérer.

Une liste des principaux de service dans un locataire peut être récupérée avec la liste az ad sp. Par défaut, la commande retourne les cents premiers principaux de service de votre locataire. Pour obtenir tous les principaux de service d’un locataire, utilisez le paramètre --all. Obtenir cette liste peut prendre beaucoup de temps : il est donc recommandé de filtrer la liste avec un des paramètres suivants :

  • --display-name demande les principaux de service ayant un préfixe qui correspond au nom fourni. Le nom d’affichage d’un principal de service est la valeur définie avec le paramètre --name lors de la création. Si vous n’avez pas défini --name lors de la création du principal de service, le nom du préfixe est azure-cli-.
  • --spn filtre la correspondance exacte de nom de principal du service. Le nom de principal du service commence toujours par https://. si la valeur que vous avez utilisé pour --name n’était pas un URI, cette valeur est https:// suivie du nom d’affichage.
  • --show-mine demande uniquement les principaux du service créés par l’utilisateur connecté.
  • --filter utilise un filtre OData et effectue un filtrage côté serveur. Cette méthode est préférable au filtrage côté client avec le paramètre --query de l’interface de ligne de commande. Pour en savoir plus sur les filtres OData, consultez syntaxe d’expression de filtres OData.

Les informations retournées pour les objets de principaux du service sont détaillées. Pour obtenir uniquement les informations nécessaires pour vous connecter, utilisez la chaîne de requête [].{id:appId, tenant:appOwnerOrganizationId}. Voici un exemple qui permet d’obtenir les informations de connexion de tous les principaux du service créés par l’utilisateur actuellement connecté :

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

Si vous travaillez dans une grande organisation avec de nombreux principaux de service, essayez ces exemples de commande :

# 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

Important

L’utilisateur et le tenant peuvent être récupérés avec les commandes az ad sp list et az ad sp show, mais les secrets d’authentification ou la méthode d’authentification ne sont pas disponibles. Les secrets des certificats dans Azure Key Vault peuvent être récupérés avec la commande az keyvault secret show, mais aucun autre secret n’est stocké par défaut. Si vous oubliez une méthode d’authentification ou un secret, effectuez la réinitialisation des informations d’identification du principal du service.

Propriétés de principal de service

Lorsque vous obtenez une liste de principaux de service en utilisant az ad sp list, il existe de nombreuses propriétés de sortie que vous pouvez référencer dans votre script.

[
  {
    "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
    }
  }
]

Utilisez le paramètre --query pour récupérer et stocker les propriétés de principal de service dans des variables.

# 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"

Étapes suivantes

Maintenant que vous avez appris à récupérer votre principal de service existant, passez à l’étape suivante pour découvrir comment gérer les rôles de votre principal de service.