Appearance
Docker
SCIM Verify is available as a Docker container, making it easy to run locally, in CI/CD pipelines, or in any environment that supports Docker. This approach eliminates the need for connecting your test environments to the internet.
The Docker image is hosted on GitHub Container Registry and can be pulled using the command below.
Before running the command below, make sure you have a local config.yaml
file and a proper output
directory. Adjust the mount points accordingly, if necessary.
Example command
.sh
docker run \
-e CONFIG_FILE=/app/config.yaml \
-e AUTH_HEADER="Bearer REPLACE_THIS" \
-e BASE_URL="https://api.scim.dev/scim/v2" \
-e HAR_FILE_NAME="/output/output.har" \
-v $(pwd)/site/.vitepress/theme/components/config.yaml:/app/config.yaml \
-v $(pwd)/output/:/output \
ghcr.io/limosa-io/scimverify
Example configuration
.yaml
detectSchema: true
detectResourceTypes: true
users:
enabled: true
operations:
- GET
- POST
- PUT
- PATCH
- DELETE
sortAttributes:
- userName
filter_tests:
- filter: userName eq "bjensen"
user_schema:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:User" },
},
"urn:ietf:params:scim:schemas:core:2.0:User":
{
"type": "object",
"properties":
{ "userName": { "type": "string", "const": "bjensen" } },
"required": ["userName"],
"additionalProperties": true,
},
},
"required": ["schemas", "urn:ietf:params:scim:schemas:core:2.0:User"],
"additionalProperties": true,
}
post_tests:
- request:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "barbara jensen",
"emails": [{ "value": "barbara.jensen@example.com" }],
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:User" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:User":
{
"type": "object",
"properties":
{
"userName":
{ "type": "string", "const": "barbara jensen" },
"emails":
{
"type": "array",
"items":
{
"type": "object",
"properties":
{
"value":
{
"type": "string",
"const": "barbara.jensen@example.com",
},
},
},
},
},
"required": ["userName"],
"additionalProperties": true,
},
},
"required":
["schemas", "id", "urn:ietf:params:scim:schemas:core:2.0:User"],
"additionalProperties": true,
}
- request:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "bjensen",
"emails": [{ "value": "barbara.jensen@example.com" }],
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:User" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:User":
{
"type": "object",
"properties":
{
"userName": { "type": "string", "const": "bjensen" },
"emails":
{
"type": "array",
"items":
{
"type": "object",
"properties":
{
"value":
{
"type": "string",
"const": "barbara.jensen@example.com",
},
},
},
},
},
"required": ["userName", "emails"],
"additionalProperties": true,
},
},
"required":
["schemas", "id", "urn:ietf:params:scim:schemas:core:2.0:User"],
"additionalProperties": true,
}
put_tests:
- id: AUTO
request:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "bdoe",
"emails": [{ "value": "barbara.jensen@example.com" }],
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:User" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:User":
{
"type": "object",
"properties":
{
"userName": { "type": "string", "const": "bdoe" },
"emails":
{
"type": "array",
"items":
{
"type": "object",
"properties":
{
"value":
{
"type": "string",
"const": "barbara.jensen@example.com",
},
},
},
},
},
"required": ["userName"],
"additionalProperties": true,
},
},
"required":
["schemas", "id", "urn:ietf:params:scim:schemas:core:2.0:User"],
"additionalProperties": true,
}
patch_tests:
- id: AUTO
request:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations":
[{ "op": "replace", "path": "userName", "value": "JohnDoe" }],
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:User" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:User":
{
"type": "object",
"properties":
{ "userName": { "type": "string", "const": "JohnDoe" } },
"required": ["userName"],
"additionalProperties": true,
},
},
"required":
["schemas", "id", "urn:ietf:params:scim:schemas:core:2.0:User"],
"additionalProperties": true,
}
delete_tests:
- id: AUTO
groups:
enabled: true
operations:
- GET
- POST
- PUT
- PATCH
- DELETE
sortAttributes:
- displayName
post_tests:
- request:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "TestGroup",
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:Group" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:Group":
{
"type": "object",
"properties":
{
"displayName": { "type": "string", "const": "TestGroup" },
},
"required": ["displayName"],
"additionalProperties": true,
},
},
"required":
["schemas", "id", "urn:ietf:params:scim:schemas:core:2.0:Group"],
"additionalProperties": true,
}
- request:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "Engineering",
"members": [{ "value": "AUTO" }],
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:Group" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:Group":
{
"type": "object",
"properties":
{
"displayName":
{ "type": "string", "const": "Engineering" },
"members":
{
"type": "array",
"items":
{
"type": "object",
"properties": { "value": { "type": "string" } },
},
},
},
"required": ["displayName", "members"],
"additionalProperties": true,
},
},
"required":
["schemas", "id", "urn:ietf:params:scim:schemas:core:2.0:Group"],
"additionalProperties": true,
}
put_tests:
- id: AUTO
request:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
"displayName": "UpdatedGroup",
"members": [{ "value": "AUTO" }],
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:Group" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:Group":
{
"type": "object",
"properties":
{
"displayName":
{ "type": "string", "const": "UpdatedGroup" },
"members":
{
"type": "array",
"items":
{
"type": "object",
"properties": { "value": { "type": "string" } },
},
},
},
"required": ["displayName", "members"],
"additionalProperties": true,
},
},
"required":
["urn:ietf:params:scim:schemas:core:2.0:Group", "schemas"],
"additionalProperties": true,
}
patch_tests:
- id: AUTO
request:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations":
[
{
"op": "replace",
"path": "displayName",
"value": "NewGroupName",
},
],
}
response:
{
"type": "object",
"properties":
{
"schemas":
{
"type": "array",
"items": { "type": "string" },
"contains":
{ "const": "urn:ietf:params:scim:schemas:core:2.0:Group" },
},
"id": { "type": "string" },
"meta": { "type": "object" },
"urn:ietf:params:scim:schemas:core:2.0:Group":
{
"type": "object",
"properties":
{
"displayName":
{ "type": "string", "const": "NewGroupName" },
},
"required": ["displayName"],
"additionalProperties": true,
},
},
"required":
["schemas", "id", "urn:ietf:params:scim:schemas:core:2.0:Group"],
"additionalProperties": true,
}
delete_tests:
- id: AUTO