Codes d’erreur et gestion des erreurs | Concepts de l’API Graph
S’applique à : API Graph | Azure Active Directory (AD)
Les applications clientes qui utilisent l’API Azure Active Directory (AD) Graph doivent implémenter une logique de gestion des erreurs pour réagir le mieux possible aux différentes conditions et offrir la meilleure expérience possible à leurs clients. Cette rubrique présente les types des erreurs renvoyées par l’API Azure AD Graph et fournit des indications d’ordre général sur la façon de les gérer.
Important
Nous vous recommandons fortement d’utiliser Microsoft Graph plutôt que l’API Graph Azure AD pour accéder aux ressources Azure Active Directory. Nos efforts de développement sont désormais axés sur Microsoft Graph et aucune autre amélioration n’est prévue pour l’API Graph Azure AD. Il existe un nombre très limité de scénarios pour lesquels l’API Graph Azure AD peut être encore appropriée ; pour plus d’informations, consultez le billet de blog Microsoft Graph ou l’API Azure AD dans le Centre de développement Office.
Gestion d’erreurs de l’API Graph
Types des erreurs
Les erreurs d’API Graph se produisent dans les catégories suivantes.
- Erreurs du client. Les erreurs du client sont représentées par les codes d’état HTTP de la série 400. Elles comprennent les objets avec des valeurs non valides, des objets dont les valeurs de propriétés ou propriétés requises sont manquantes, des tentatives d’accès à une ressource inexistante, des tentatives de mise à jour d’une propriété en lecture seule et l’omission du jeton d’autorisation requis. Pour corriger ces erreurs, résolvez le problème sous-jacent avant de retenter la demande.
- Erreurs du serveur. Les erreurs du serveur sont représentées par les codes d’état HTTP de la série 500, par exemple une défaillance de répertoire temporaire. La plupart de ces erreurs sont temporaires et peuvent être résolues en retentant la demande.
- Erreurs réseau/de protocole. Différentes erreurs liées au réseau peuvent se produire lors de l’envoi d’une demande ou de la réception d’une réponse, telles que des erreurs de résolution du nom d’hôte, des connexions fermées prématurément et des erreurs de négociation SSL. La plupart de ces erreurs ne peuvent pas être corrigées par une nouvelle tentative ; le problème sous-jacent doit être résolu. Toutefois, certaines erreurs, telles que les échecs de résolution du nom d’hôte ou les délais d’expiration, peuvent être corrigées en retentant la demande.
Structure des messages d’erreur
Les erreurs d’API Graph ont un corps mis en forme qui est constitué d’un code d’état HTTP, d’un message et de valeurs. Utilisez les propriétés du corps d’erreur dans votre logique de gestion des erreurs.
Remarque : toutefois, certaines réponses HTTP peuvent ne pas comporter le corps de réponse code/message/valeurs, car la demande est routée via des services de proxy et de passerelle. Veillez à inclure une logique par défaut qui peut gérer les erreurs en fonction du seul code d’état HTTP.
Voici l’exemple d’une erreur HTTP de la série 400 Request_BadRequest.
HTTP/1.1 400 Bad Request
Content-Type: application/json;odata=minimalmetadata;charset=utf-8
request-id: ddca4a7e-02b1-4899-ace1-19860901f2fc
Date: Tue, 02 Jul 2013 01:48:19 GMT
…
{
"odata.error" : {
"code" : "Request_BadRequest",
"message" : {
"lang" : "en",
"value" : "A value is required for property 'mailNickname' of resource 'Group'."
},
"values" : null
}
}
Chaque corps de message dispose de propriétés de code, de message et de valeurs.
Code : concevez votre logique de gestion des erreurs pour créer une branche en fonction du code.
"code" : "Request_BadRequest"
Message : tuple langue/valeur qui représente un message d’erreur explicite. Le contenu figure dans le champ valeur. Dans l’exemple suivant, la demande échoue, car la valeur de la propriété mailNickname est manquante.
"message" : { "lang" : "en", "value" : "A value is required for property 'mailNickname' of resource 'Group'." }
Valeurs : collection de paires nom/valeur qui fournissent plus d’informations sur la nature de la défaillance. Dans l’exemple suivant, il n’y a pas d’inclusion de valeurs.
"values" : null
Référence de code d'erreur
Codes d’erreur HTTP
Le tableau suivante répertorie les codes d’erreur, les messages d’erreur et les actions de l’API Graph à prendre en compte pour corriger les erreurs.
Généralement, les erreurs HTTP de la série 500 répondent aux nouvelles tentatives, de préférence distribuées sur des intervalles de temps de plus en plus longs (« nouvelle tentative avec un intervalle de temporisation ») et avec un facteur de distribution aléatoire. Les erreurs de la série 400 indiquent un problème qui doit être résolu avant toute nouvelle tentative.
Code d'état HTTP | Code d’erreur | Message d'erreur | Détails |
---|---|---|---|
400 | Directory_ExpiredPageToken | La valeur de jeton de page spécifiée a expiré et ne peut ne plus être incluse dans votre demande. | |
400 | Directory_ResultSizeLimitExceeded | La limite de taille du résultat a été dépassée | La demande ne peut pas être satisfaite car elle est associée à trop de résultats. Cette erreur se produit très rarement. |
400 | DomainVerificationCodeNotFound | Échec de la vérification du domaine, car le processus de vérification ne peut pas trouver l’enregistrement TXT correspondant au code de vérification. | |
400 | ObjectConflict | Le nom de domaine existe déjà dans un domaine non vérifié de cette société. | |
400 | ObjectConflict | Le nom de domaine existe déjà dans un domaine vérifié de cette société. | |
400 | ObjectInUse | Impossible de supprimer le domaine actuellement référencé par un utilisateur, un groupe ou une application mutualisée. | |
400 | ObjectPendingDeletion | Impossible de vérifier un domaine existant en attente de suppression. | |
400 | ObjectPendingTakeover | Impossible de supprimer un domaine pendant la prise de contrôle du client. | |
400 | Request_BadRequest | Demande incorrecte. Corrigez la demande avant de réessayer. | Indique une erreur dans la demande, par exemple, une valeur de propriété non valide ou un argument de requête non pris en charge. Corrigez la demande avant de réessayer. |
400 | Request_DataContractVersionMissing | Le paramètre de version de contrat de données est manquant. Inclure l’api-version (version de l’API) comme paramètre de demande avec toutes vos demandes. | |
400 | Request_InvalidDataContractVersion | L’api-version (version de l’API) spécifiée n'est pas valide. La valeur doit correspondre exactement à une version prise en charge. | |
400 | Request_InvalidRequestUrl | L’URL de la demande n’était pas valide. La demande doit avoir le format suivant : /tenantdomainname/Entity ou /$metadata. Le nom de domaine du locataire peut être l’un des noms de domaine vérifiés ou non vérifiés ou d’ID de contexte. | |
400 | Request_UnsupportedQuery | La demande GET n’est pas prise en charge. Corrigez les paramètres de la demande et réessayez. | |
401 | Authentication_ExpiredToken | Votre jeton d’accès a expiré. Renouvelez-le avant d’envoyer la demande. | Le jeton d’accès a expiré. Remplacez le jeton puis resoumettez-le. |
401 | Authentication_MissingOrMalformed | Jeton d’accès manquant ou incorrect. | La valeur access_token dans l’en-tête d’autorisation est manquante ou incorrecte. Cette valeur est obligatoire. Utilisez la valeur dans le jeton d’authentification. |
401 | Authorization_IdentityDisabled | Le principal d’application appelant est désactivé. | Le principal spécifié dans le jeton d’accès est dans le répertoire, mais est désactivé. Réactivez le compte dans le répertoire, et réessayez. |
401 | Authorization_IdentityNotFound | L’identité de l’application appelante n’a pas pu être établie. | Le principal spécifié dans le jeton d’accès est introuvable dans le répertoire. Cela peut être dû au fait que le jeton est périmé, que le principal a été supprimé du répertoire, ou que la synchronisation du répertoire est retardée. |
403 | Authentication_Unauthorized | Demande non autorisée. | Le jeton contient des revendications non valides ou non prises en charge. Obtenez un autre jeton et retentez la demande. |
403 | Authorization_RequestDenied | Les informations d’identification spécifiées n’ont pas de privilèges suffisants pour effectuer cette demande. | La demande est refusée en raison de privilèges insuffisants. Par exemple, un principal non-administrateur n’est pas autorisé à supprimer une ressource. |
403 | Directory_QuotaExceeded | La limite du quota d’objets d’annuaire pour {tenantName} a été dépassée. Demandez à votre administrateur d’augmenter la limite de quota ou de supprimer des objets pour réduire le quota utilisé. | Un quota de répertoire a été dépassé. Le locataire a trop d’objets, ou bien les objets contiennent trop de valeurs. Cela se produit également lorsque trop d’objets sont créés pour le principal. Augmentez le nombre maximum d’objets autorisés pour le locataire ou le principal, ou réduisez le nombre de valeurs comprises dans la demande de création/mise à jour. |
404 | Directory_ObjectNotFound | Impossible de lire les informations de la société à partir du répertoire. | |
404 | Request_ResourceNotFound | La ressource {resource} n’existe pas ou l’un de ses objets de référence-propriété interrogés n’est pas présent. | La ressource identifiée par l’URI n’existe pas. Modifiez la valeur et retentez la demande. |
409 | Request_MultipleObjectsWithSameKeyValue | Une seule ressource était attendue pour le résultat, mais plusieurs ressources ont été trouvées. Mettez à jour l’objet/les objets pour résoudre le conflit. | Cette erreur peut se produire lorsqu’il y a deux objets ou plus qui ont la même valeur de clé, par exemple, lorsque deux utilisateurs ont le même UserPrincipalName. |
429 | Trop de demandes. | Cette erreur est générée lorsque des demandes sont limitée. Un délai d’attente suggérée est retourné dans la valeur Retry-After de l’en-tête de réponse. Relancez la requête après avoir attendu le nombre recommandé de secondes. | |
500 | Service_InternalServerError | Le serveur a rencontré une erreur interne. | Erreur interne du serveur lors du traitement de la demande. |
502 | [Tout] | « ... Service indisponible… » | Un serveur agissant comme une passerelle ou un proxy a rencontré une erreur due à un autre serveur pendant le traitement de la demande. Attendez quelques minutes puis retentez la demande. |
503 | Directory_ConcurrencyViolation | Erreur due aux demandes simultanées envoyées au locataire. Patientez un instant et réessayez. | |
503 | Une erreur s’est produite pendant la vérification DNS. Remarque : Cette erreur peut se produire pour diverses raisons, notamment l’indisponibilité du DNS. | ||
Authentication_Unknown | Erreur de serveur interne. | Ce code d’erreur est utilisé lorsque d’autres codes d’erreur ne s’appliquent pas. | |
Authentication_UnsupportedTokenType | Le type de jeton présenté n’est pas géré. Seuls les jetons de porteur sont pris en charge. | Le type de jeton n’est pas pris en charge. Modifiez le type de jeton et retentez la demande. | |
Directory_BindingRedirection | Les informations du locataire ne sont pas disponibles localement. Utilisez les URL suivantes pour obtenir les informations. | Lorsque la partition du locataire n’est pas disponible dans le centre de données, les clients doivent se connecter à l’URI renvoyé dans la réponse. | |
Directory_BindingRedirectionInternalServerError | Les informations du locataire ne sont pas disponibles localement. Le serveur a rencontré une erreur interne en essayant de remplir les points de terminaison de centre de données les plus proches. | Lorsqu’une exception de redirection obligatoire se produit, la liste des points de terminaison de centre de données les plus proches est remplie pour le service. Cette erreur signale une exception pendant le remplissage de la liste. Réexécutez la requête. | |
Directory_CompanyNotFound | Impossible de lire les informations de la société à partir du répertoire. | Une erreur s’est produite lors du chargement des informations de la société à partir du service d’annuaire. | |
Directory_ReplicaUnavailable | Le réplica par défaut n’est pas disponible. Réessayez sans en-tête de clé de session de réplica. | Omettez l’en-tête x-ms-replica-session-key puis réessayez. | |
Headers_DataContractVersionMissing | L’en-tête de version de contrat de données est manquant. Incluez x-ms-dirapi-data-contract-version dans votre demande. | La version de contrat cliente est manquante de la demande. | |
Headers_HeaderNotSupported | L’en-tête {0} n’est pas pris en charge actuellement. | La demande contient un en-tête HTTP non pris en charge. Modifiez l’en-tête et réessayez la demande. | |
Request_InvalidReplicaSessionKey | La clé de session de réplica fournie n’est pas valide. | Résolvez la clé de session de réplica et réessayez la demande. | |
Request_ThrottledPermanently | Votre requête est limitée définitivement. Appelez l’assistance pour résoudre le problème. | Le locataire a dépassé de façon répétée et persistante la limite de taux de demandes de jeton. Les demandes provenant du locataire sont rejetées jusqu’à ce que le service soit renégocié. Pour obtenir de l’aide, contactez l’assistance Microsoft. |