Cuerpo de respuesta
Las solicitudes de API de REST de los dominios de identidad devuelven un cuerpo de respuesta JSON. El código de estado indica que se ha realizado correctamente o ha fallado.
Códigos de respuesta admitidos
Consulte Códigos de respuesta para obtener más información sobre los códigos de respuesta soportados.
Cuerpo de respuesta para el éxito
El formato de respuesta para todas las solicitudes de API de REST es un objeto JSON. El contenido exacto de la respuesta depende del contenido y el tipo de solicitud, si la solicitud se ha realizado correctamente o ha fallado, y de cualquier filtro de consulta que se haya realizado.
Consulte el separador Ejemplos de cada página de punto final para ver ejemplos de cuerpo de respuesta específicos.
Cuerpo de respuesta POST correcto
A continuación se muestra un ejemplo de respuesta que indica que se ha creado correctamente un recurso User con una solicitud 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
}
}
Cuerpo de respuesta GET correcto
Las solicitudes GET suelen devolver un objeto ListResponse, que puede contener varios registros. En este ejemplo se muestran los resultados de una búsqueda GET en Users, con el parámetro de consulta: filter=userName sw "d", es decir, los usuarios cuyos nombres de usuario empiezan por 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
}
Cuerpo de respuesta simple en error
En caso de error y en caso de éxito, el cuerpo de la respuesta es JSON. El formato de todas las respuestas de error de la API de REST de dominios de identidad es similar. Este ejemplo es una excepción simple que detalla el código de estado y el mensaje de excepción de una solicitud no válida.
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"detail": "Request failed: HTTP 400 Bad Request.",
"status": "400"
}
Ejemplo de respuesta de excepción de validación
Este ejemplo es una excepción de validación en la que faltan algunos atributos necesarios.
{
"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"
}
}
Ejemplo de respuesta de excepción funcional
Este ejemplo es una excepción funcional con detalles adicionales.
{
"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"
}
}
}
Supervisión Dinámica con Cabeceras HTTP ECID y RID
La supervisión dinámica es el mecanismo por el cual las solicitudes HTTP se pueden identificar de forma única y, por lo tanto, rastrearse a medida que fluyen a través del sistema.
También proporciona un medio por el cual la información de contexto se puede comunicar entre los componentes cooperantes del dominio de identidad que participan en la satisfacción de solicitudes. El ID de contexto de ejecución (ECID) y el ID de relación (RID) son útiles para realizar el seguimiento de la secuencia de eventos entre servicios.
-
ECID: identificador único. El ECID es único para cada nueva tarea raíz. Este número sigue siendo el mismo que el que se comparte en el árbol de tareas asociadas con la tarea raíz.
-
El RID: identificador de relación. El RID es un juego ordenado de números que describe la ubicación de cada tarea en el árbol de tareas. El número inicial suele ser cero y, a continuación, los números aumentan para cada subtarea adicional.
Las cabeceras HTTP X-ORACLE-DMS-ECID y X-ORACLE-DMS-RID se devuelven como parte de la respuesta de REST desde el dominio de identidad. Estas cabeceras HTTP corresponden al ECID y al RID de la solicitud. Los valores de estas cabeceras los define el dominio de identidad al devolver la respuesta. El emisor de llamada puede utilizar el ECID y el RID para realizar un seguimiento y correlacionar las solicitudes que se originan con eventos que surgen del dominio de identidad.
Por ejemplo, el cliente puede incluir estos valores como parte de un mensaje de error, porque es importante correlacionar los eventos del cliente con los errores del servidor. El formato estándar de Oracle para el registro implica un campo dedicado al ECID. Una vez que se conoce el ECID, cuando se lee desde un mensaje de registro de nivel de error, por ejemplo, es posible encontrar todos los demás mensajes de registro asociados con esa tarea consultando los archivos de registro para los mensajes que contienen ese ECID.
Utilice los informes de datos de diagnóstico de los dominios de identidad para ver los datos de registro capturados con fines de diagnóstico. Puede encontrar el ECID y el RID en el informe y, a continuación, correlacionar esos identificadores con el ECID y el RID que devuelven las llamadas REST de los dominios de identidad que realizan las aplicaciones. Consulte Ejecución del informe de datos de diagnóstico.
Ejemplos de Control Dinámico
-
Una solicitud POST en el punto final
/Users. -
Las cabeceras del comando cURL que son el resultado de la ejecución de POST en el punto final
/Users. -
Una respuesta de retorno de GET en el punto final
/AuditEventsque muestra que el ECID es el mismo que el que ha utilizado el servidor para crear el usuario. -
Sección del informe de diagnóstico que se generó cuando se ejecutó la solicitud POST en el punto final
/Users.
Solicitud POST a /Usuarios
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"
}
]
}'
Cabeceras de Comando cURL en la Respuesta
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
Respuesta a la solicitud GET a /AuditEvents
Nota: En este ejemplo, se muestra que el ECID es el mismo que el utilizado por el servidor para crear el usuario.
Solicitudhttp://<domainURL>/admin/v1/AuditEvents?filter=actorName sw "adm" and ecId eq "0000M31FtLAFo2H6yvR_6G1QJ7Wl0000K^"
Respuesta
{
"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
}
Muestra de informe de diagnóstico