Corps de la réponse
Les demandes d'API REST des domaines d'identité retournent un corps de réponse JSON. Le code de statut indique la réussite ou l'échec.
Codes de réponse pris en charge
Corps de réponse avec succès
Le format de réponse pour toutes les demandes d'API REST est un objet JSON. Le contenu exact de la réponse dépend du contenu et du type de la demande, de la réussite ou de l'échec de la demande et de tout filtrage d'interrogation effectué.
Voir l'onglet Exemples de chaque page de point d'extrémité pour obtenir des exemples de corps de réponse spécifiques.
Corps de réponse POST réussi
Voici un exemple de réponse indiquant la création réussie d'une ressource User
avec une demande POST
:
{
"idcsCreatedBy": {
"type": "App",
"display": "Confidential App",
"value": "<app-id>",
"ocid": "<app-ocid>",
"$ref": "https://<domainURL>/admin/v1/Apps/<app-id>"
},
"id": "<user-id>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false
},
"meta": {
"created": "2023-08-29T21:04:25.379Z",
"lastModified": "2023-08-29T21:04:25.379Z",
"version": "7fd6be02ffc542809e3ea193d1942df7",
"resourceType": "User",
"location": "https://<domainURL>/admin/v1/Users/<user-id>"
},
"active": true,
"displayName": "Clarence Saladna",
"idcsLastModifiedBy": {
"value": "<app-id>",
"display": "Confidential App",
"ocid": "<app-ocid>",
"type": "App",
"$ref": "https://<domainURL>/admin/v1/Apps/<app-id>"
},
"name": {
"givenName": "Clarence",
"familyName": "Saladna",
"formatted": "Clarence Saladna"
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"ocid": "<user-ocid>",
"userName": "csaladna@example.com",
"emails": [
{
"secondary": false,
"verified": false,
"type": "recovery",
"primary": false,
"value": "csaladna@example.com"
},
{
"secondary": false,
"verified": false,
"type": "work",
"primary": true,
"value": "csaladna@example.com"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User"
],
"domainOcid": "<domain-ocid>",
"compartmentOcid": "<compartment-ocid>",
"tenancyOcid": "<tenancy-ocid>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:capabilities:User": {
"canUseApiKeys": true,
"canUseAuthTokens": true,
"canUseConsolePassword": true,
"canUseCustomerSecretKeys": true,
"canUseOAuth2ClientCredentials": true,
"canUseSmtpCredentials": true,
"canUseDbCredentials": true
}
}
Corps de réponse GET réussi
Les demandes GET
retournent généralement un objet ListResponse
, qui peut contenir plusieurs enregistrements. Cet exemple montre les résultats d'une recherche GET
sur les utilisateurs, avec le paramètre d'interrogation : filter=userName sw "d"
, c'est-à-dire les utilisateurs dont les noms d'utilisateur commencent par d
.
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:ListResponse"
],
"totalResults": 3,
"Resources": [
{
"idcsCreatedBy": {
"type": "User",
"display": "dennis@example.com",
"value": "OCI User",
"ocid": "<user-ocid>",
"$ref": "https://<domainURL>/admin/v1/Users/OCI User"
},
"id": "<user-id>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false
},
"meta": {
"created": "2023-08-15T20:48:12.736Z",
"lastModified": "2023-08-15T20:48:12.736Z",
"version": "087a80ea35614663b05ea69b24b425a7",
"resourceType": "User",
"location": "https://<domainURL>/admin/v1/Users/<user-id>"
},
"active": true,
"displayName": "Dean",
"idcsLastModifiedBy": {
"value": "OCI User",
"display": "dean@example.com",
"ocid": "<user-ocid>",
"type": "User",
"$ref": "https://<domainURL>/admin/v1/Users/OCI User"
},
"name": {
"givenName": "Dean",
"familyName": "",
"formatted": "Dean"
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"ocid": "<user-ocid>",
"userName": "dean@example.com",
"emails": [
{
"secondary": false,
"verified": false,
"type": "recovery",
"primary": false,
"value": "dean@example.com"
},
{
"secondary": false,
"verified": false,
"type": "work",
"primary": true,
"value": "dean@example.com"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User"
],
"domainOcid": "<domain-ocid>",
"compartmentOcid": "<compartment-ocid>",
"tenancyOcid": "<tenancy-ocid>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:capabilities:User": {
"canUseApiKeys": true,
"canUseAuthTokens": true,
"canUseConsolePassword": true,
"canUseCustomerSecretKeys": true,
"canUseOAuth2ClientCredentials": true,
"canUseSmtpCredentials": true,
"canUseDbCredentials": true
}
},
{
"idcsCreatedBy": {
"type": "User",
"display": "joel@example.com",
"value": "OCI User",
"ocid": "<user-ocid>",
"$ref": "https://<domainURL>/admin/v1/Users/OCI User"
},
"id": "<user-id>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false
},
"meta": {
"created": "2023-07-19T18:23:28.381Z",
"lastModified": "2023-08-09T16:22:41.590Z",
"version": "0ecbeddb823247d8a24a67739b006892",
"resourceType": "User",
"location": "https://<domainURL>/admin/v1/Users/<user-id>"
},
"active": true,
"displayName": "Dennis",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:mfa:User": {
"preferredDevice": {
"value": "<device-id>",
"$ref": "https://<domainURL>/admin/v1/Devices/<device-id>"
},
"loginAttempts": 0,
"mfaStatus": "ENROLLED",
"preferredAuthenticationFactor": "PUSH"
},
"idcsLastModifiedBy": {
"value": "<app-id>",
"display": "idcssso",
"ocid": "<app-ocid>",
"type": "App",
"$ref": "https://<domainURL>/admin/v1/Apps/<app-id>"
},
"name": {
"givenName": "Dennis",
"familyName": "",
"formatted": "Dennis"
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"ocid": "<user-ocid>",
"userName": "dennis@example.com",
"emails": [
{
"secondary": false,
"verified": true,
"type": "recovery",
"primary": false,
"value": "dennis@example.com"
},
{
"secondary": false,
"verified": true,
"type": "work",
"primary": true,
"value": "dennis@example.com"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:mfa:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User"
],
"domainOcid": "<domain-ocid>",
"compartmentOcid": "<compartment-ocid>",
"tenancyOcid": "<tenancy-ocid>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:capabilities:User": {
"canUseApiKeys": true,
"canUseAuthTokens": true,
"canUseConsolePassword": true,
"canUseCustomerSecretKeys": true,
"canUseOAuth2ClientCredentials": true,
"canUseSmtpCredentials": true,
"canUseDbCredentials": true
}
},
{
"idcsCreatedBy": {
"type": "User",
"display": "colin.torretta@oracle.com",
"value": "OCI User",
"ocid": "<user-ocid>",
"$ref": "https://<domainURL>/admin/v1/Users/OCI User"
},
"id": "<user-id>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false
},
"meta": {
"created": "2023-08-21T22:36:22.978Z",
"lastModified": "2023-08-22T03:00:22.934Z",
"version": "d91908a80bb44ea8bc23e063b42a5e1b",
"resourceType": "User",
"location": "https://<domainURL>/admin/v1/Users/<user-id>"
},
"active": true,
"displayName": "Diane",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:mfa:User": {
"preferredDevice": {
"value": "<device-id>",
"$ref": "https://<domainURL>/admin/v1/Devices/<device-id>"
},
"mfaStatus": "ENROLLED",
"preferredAuthenticationFactor": "TOTP"
},
"idcsLastModifiedBy": {
"value": "<app-id>",
"display": "idcssso",
"ocid": "<app-ocid>",
"type": "App",
"$ref": "https://<domainURL>/admin/v1/Apps/<app-id>"
},
"name": {
"givenName": "Diane",
"familyName": "",
"formatted": "Diane"
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"ocid": "<user-ocid>",
"userName": "diane@example.com",
"emails": [
{
"secondary": false,
"verified": true,
"type": "recovery",
"primary": false,
"value": "diane@example.com"
},
{
"secondary": false,
"verified": true,
"type": "work",
"primary": true,
"value": "diane@example.com"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:mfa:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User"
],
"domainOcid": "<domain-ocid>",
"compartmentOcid": "<compartment-ocid>",
"tenancyOcid": "<tenancy-ocid>",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:capabilities:User": {
"canUseApiKeys": true,
"canUseAuthTokens": true,
"canUseConsolePassword": true,
"canUseCustomerSecretKeys": true,
"canUseOAuth2ClientCredentials": true,
"canUseSmtpCredentials": true,
"canUseDbCredentials": true
}
}
],
"startIndex": 1,
"itemsPerPage": 50
}
Corps de réponse simple en cas d'erreur
En cas d'erreur et de succès, le corps de la réponse est JSON. Le format des réponses d'erreur d'API REST de tous les domaines d'identité est similaire. Cet exemple est une exception simple détaillant le code de statut et le message d'exception pour une demande non valide.
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"detail": "Request failed: HTTP 400 Bad Request.",
"status": "400"
}
Exemple de réponse d'exception de validation
Cet exemple est une exception de validation où certains attributs obligatoires sont manquants.
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error",
"urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error"
],
"detail": "Missing required attribute(s): mappingAttributeValue,password.",
"status": "400",
"urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error": {
"messageId": "error.common.validation.missingReqAttributes"
}
}
Exemple de réponse d'exception fonctionnelle
Cet exemple est une exception fonctionnelle avec des détails supplémentaires.
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error",
"urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error"
],
"detail": "INVALID_CREDENTIALS",
"status": "400",
"urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error": {
"additionalData": {
"csr": false,
"tenantName": "TENANT1",
"id": "<tenancy-id>",
"displayName": "Jane Smith",
"locale": "en",
"preferredLanguage": "en",
"timezone": "America/Chicago"
}
}
}
Surveillance dynamique à l'aide des en-têtes HTTP ECID et RID
La surveillance dynamique est le mécanisme par lequel les demandes HTTP peuvent être identifiées de manière unique et donc suivies à mesure qu'elles circulent dans le système.
Il fournit également un moyen de communiquer des informations contextuelles entre les composants de domaine d'identité coopérants impliqués dans l'exécution des demandes. L'ID contexte d'exécution (ECID) et l'ID relation (RID) sont utiles pour suivre la séquence des événements entre les services.
-
L'ECID : Identificateur unique. L'ECID est unique pour chaque nouvelle tâche racine. Ce nombre reste le même qu'il est partagé dans l'arborescence des tâches associées à la tâche racine.
-
RID : Identificateur de relation. Le RID est un ensemble ordonné de numéros qui décrit l'emplacement de chaque tâche dans l'arborescence des tâches. Le nombre de tête est généralement un zéro, puis les nombres augmentent pour chaque sous-tâche supplémentaire.
Les en-têtes HTTP X-ORACLE-DMS-ECID
et X-ORACLE-DMS-RID
sont retournés dans le cadre de la réponse REST du domaine d'identité. Ces en-têtes HTTP correspondent à l'ECID et au RID de la demande. Les valeurs de ces en-têtes sont définies par le domaine d'identité lors du retour de la réponse. L'appelant peut utiliser l'ECID et le RID pour suivre et corréler les demandes provenant d'événements provenant du domaine d'identité.
Par exemple, le client peut inclure ces valeurs dans un message d'erreur, car il est important de corréler les événements côté client avec les erreurs côté serveur. Le format standard Oracle pour la journalisation implique un champ dédié à l'ECID. Une fois l'ECID connu, lorsqu'il est lu à partir d'un message de journal de niveau erreur, par exemple, il est possible de trouver tous les autres messages de journal associés à cette tâche en interrogeant les fichiers journaux pour les messages qui contiennent cet ECID.
Utilisez les rapports sur les données de diagnostic des domaines d'identité pour voir les données de journalisation saisies à des fins de diagnostic. Vous pouvez trouver l'ECID et le RID dans le rapport, puis corréler ces identificateurs à l'ECID et au RID retournés par les appels REST des domaines d'identité que vos applications effectuent. Voir Exécution du rapport Données de diagnostic.
Exemples de surveillance dynamique
-
Une demande POST sur le point d'extrémité
/Users
. -
En-têtes de commande cURL résultant de l'exécution de l'auto-test de démarrage (POST) sur le point d'extrémité
/Users
. -
Réponse de retour d'un élément GET sur le point d'extrémité
/AuditEvents
qui montre que l'ECID est le même que celui utilisé par le serveur pour créer l'utilisateur. -
Section du rapport de diagnostic générée lors de l'exécution de la demande POST sur le point d'extrémité
/Users
.
Demande POST à /Utilisateurs
curl -X POST -D dumpedHeadersPostUsers.txt
http://<domainURL>/admin/v1/Users
-H 'Authorization: Bearer eyJ4NXQjUzI....poYw'
-H 'Cache-Control: no-cache'
-H 'Content-Type: application/json'
-d '{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"name": {
"givenName": "Clarence",
"familyName": "Saladna"
},
"userName": "csaladna@example.com",
"emails": [
{
"value": "csaladna@example.com",
"type": "work",
"primary": true
},
{
"value": "csaladna1@example.com",
"primary": false,
"type": "recovery"
}
]
}'
En-têtes de commande cURL dans la réponse
HTTP/1.1 201 Created
Date: Thu, 04 Jan 2018 12:57:37 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 1227
Proxy-Connection: Keep-Alive
X-ORACLE-DMS-RID: 0
X-ORACLE-DMS-ECID: 0000M31FtLAFo2H6yvR_6G1QJ7Wl0000K
Réponse à la demande GET à /AuditEvents
Note : Cet exemple montre que l'ECID est le même que celui utilisé par le serveur pour créer l'utilisateur.
Demandehttp://<domainURL>/admin/v1/AuditEvents?filter=actorName sw "adm" and ecId eq "0000M31FtLAFo2H6yvR_6G1QJ7Wl0000K^"
Réponse
{
"schemas": [
"urn:scim:api:messages:2.0:ListResponse"
],
"totalResults": 1,
"Resources": [
{
"idcsCreatedBy": {
"type": "User",
"display": "admin opc",
"value": "<user-id>",
"$ref": "https://<domainURL>/admin/v1/Users/<user-id>"
},
"actorName": "admin@oracle.com",
"id": "2a02fb8bc9a548edb21fe1c80ff6ada0",
"actorDisplayName": "admin opc",
"meta": {
"created": "2024-01-04T12:57:46.314Z",
"lastModified": "2024-01-04T12:57:46.314Z",
"resourceType": "AuditEvent",
"location": "https://<domainURL>/admin/v1/AuditEvents/2a02fb8bc9a548edb21fe1c80ff6ada0"
},
"actorId": "<user-id>",
"adminResourceId": "a06ff8169b3640a29792a15ece75c906",
"adminResourceName": "csaladna@example.com",
"timestamp": "2024-01-04T12:57:46.312Z",
"idcsLastModifiedBy": {
"value": "<user-id>",
"display": "admin opc",
"type": "User",
"$ref": "https://<domainURL>/admin/v1/Users/<user-id>"
},
"quotaCount": 0,
"ecId": "0000M31FtLAFo2H6yvR_6G1QJ7Wl0000K^",
"rId": "0",
"eventId": "admin.user.create.success",
"ssoAuthnLevel": 0,
"adminResourceType": "User",
"actorType": "User",
"serviceName": "Admin",
"adminValuesAdded": "{\"schemas\":[\"urn:ietf:params:scim:schemas:core:2.0:User\"],\"name\":{\"familyName\":\"Saladna\",\"givenName\":\"Clarence\",\"formatted\":\"Clarence Saladna\"},\"userName\":\"csaladna@example.com\",\"emails\":[{\"value\":\"csaladna@example.com\",\"primary\":\"true\",\"type\":\"work\",\"verified\":\"false\"},{\"value\":\"csaladna@example.com\",\"primary\":\"false\",\"type\":\"recovery\",\"verified\":\"false\"}],\"id\":\"a06ff8169b3640a29792a15ece75c906\",\"displayName\":\"Clarence Saladna\",\"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User\":{\"status\":\"verified\"},\"active\":\"true\",\"password\":\"*********\",\"urn:ietf:params:scim:schemas:oracle:idcs:extension:passwordState:User\":{\"mustChange\":\"true\",\"lastSuccessfulSetDate\":\"2024-01-04T12:57:37.940Z\",\"cantChange\":\"false\",\"expired\":\"false\",\"passwordHistory\":[{\"sequenceNumber\":\"1\",\"value\":\"*********\"}]},\"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User\":{\"locked\":{\"on\":\"false\"},\"loginAttempts\":\"0\"},\"meta\":{\"created\":\"2024-01-04T12:57:37.951Z\",\"lastModified\":\"2024-01-04T12:57:37.951Z\"},\"idcsCreatedBy\":{\"value\":\"<user-id>\",\"type\":\"User\",\"display\":\"admin opc\"},\"idcsLastModifiedBy\":{\"value\":\"<user-id>\",\"type\":\"User\",\"display\":\"admin opc\"}}",
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:AuditEvent"
]
}
],
"startIndex": 1,
"itemsPerPage": 50
}
Exemple de rapport de diagnostic