User Provisioning Overview with SCIM

SCIM

Introduction

The System for Cross-domain Identity Management, or SCIM, is an API specification that was created to facilitate the management of people and groups of people in cloud-based applications and services.

OutThink’s SCIM API is built to be compliant with the SCIM 2.0 specification and can be integrated with major Identity Providers like Entra ID (Azure AD)Okta and OneLogin. The intention is to use our SCIM API to programmatically create and manage end-users within your organization(s).

OutThink’s SCIM API processes people (aka end-users, learners) and groups of people.

Basic API Information

The base address of OutThink’s SCIM API is as follows:


https://outthink-api.azure-api.net/scim/Organizations/{org_id}/v2

where {org_id} is the unique identifier assigned by OutThink to an organization within your corporate hierarchy. This may represent your entire company, or a specific sub-organization, division, or customer.

Unlike most other solution providers, OutThink supports multiple SCIM API integrations side-by-side, allowing you to automatically provision end-users and groups at different levels of your business operations independently.

Authentication

To use the SCIM API, you’ll need an access token (or secret token) for your organization. This token will be generated by OutThink upon request and provided securely to you alongside the organization identifier.

The token will grant administrative rights to manage end-users within the organization, including adding, editing and deleting. It is therefore important to ensure the token is managed securely and never stored in clear text.

Tokens may be regenerated at any time upon customer request.

Using the API

The API is accessed securely via HTTPS.

The Authorization header with the type of Bearer must be used passing the access token when calling any of the endpoints in the API (with the exception of the /ServiceProviderConfig endpoint).

Using the API is a matter of setting up your SCIM 2-compliant Identity Provider software to talk to the OutThink SCIM API. Read on for a fuller understanding of the OutThink SCIM API, and a link to instructions for setting up Azure Active Directory (Azure AD) and Okta specifically.

API Reference

Users

SCIM Users represent end-users in your OutThink organization. You can create, update, list, activate, deactivate and delete users within the organization via the SCIM API.

SCIM Attribute Description Required Type
userName Unique internal identifier of the user in the source system Yes string
active Whether the user is in an active (enabled) state No boolean
externalId External reference identifier of the user No string
name.givenName User’s first (or given) name Yes string
name.familyName User’s last name (or surname) Yes string
emails[type eq “work”].value The user’s corporate email address Yes string
addresses[type eq “work”].country The user’s country of residence or work No string
roles[primary eq true].value The job title of the user No string
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department The name of the department to which the user belongs No string
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:division The name of the corporate division to which the user belongs No string
urn:ietf:params:scim:schemas:extension:enterprise:2.0:employeeNumber The user’s unique identifier in the corporate LMS No string
nickName The user’s unique name, badge Id, or other identifier, used for identification of the user, typically where email address is unavailable No string
preferredLanguage The user’s preferred language No string

Note: Other attributes supported by the SCIM specification, if provided, won’t be synchronized between Identity Providers and OutThink.

Supported SCIM Schemas

OutThink uses the core SCIM schema, plus the Enterprise User extension schema. The latter is used to convey the following information for end-users (learners):-

  • department
  • division
  • employeeNumber

(See the SCIM schema specification for full details of SCIM schemas.)

Supported Operations

  • POST /Users 
    Creates a user.
  • GET /Users/$userID
    Gets a single user.
  • GET /Users
    Search for users with filtering, via GET.
  • POST /Users/.search
    Search for users with filtering, via POST.
  • PUT /Users/$userID
    Updates a single user (all attributes).
  • PATCH /Users/$userID
    Updates a single user (add, replace, remove selected attributes).
  • DELETE /Users/$userID
    Deletes a single user.
  • GET /ServiceProviderConfig
    Gets service provider configuration.
  • GET /Schemas
    Gets all supported schemas.
  • GET /Schemas/$schemaID
    Gets a specific schema.

Example Request

The following is an example request received by the OutThink SCIM API for creating an end-user.

# Example request to create an end-user
POST https://outthink-api.azure-api.net/scim/Organizations/xxxxxxxxxxxxxx/v2/Users
Content-Type: application/scim+json
Authorization: Bearer xxxxxxxxxxxxxx

{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
  ],
  "userName": "john.smith@outthink.io",
  "externalId": "81ef27b8-80ce-4c24-ba1e-067048806ecf",
  "active": true,
  "name": {
    "familyName": "John",
    "givenName": "Smith"
  },
  "emails": [
    {
      "value": "john.smith@outthink.io",
      "type": "work"
    },
    {
      "value": "mary.jones@outthink.io",
      "type": "other"
    }
  ],
  "addresses": [
    {
      "country": "GB",
      "type": "work"
    }
  ],
  "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "department": "Marketing",
    "division": "Southern",
    "employeeNumber": "12847A"
  },
  "roles": [
    {
      "value": "Marketing Assistant",
      "primary": true
    }
  ],
  "nickName": "A-12132",
  "preferredLanguage": "en-GB"
}

Line Managers

Due to some provider’s non-conformance to the SCIM specification, ingestion of end-user line managers (if required) should now be achieved via a GraphAPI integration.

Groups

SCIM Groups represent groups in your OutThink organization. You can create, update, list and delete groups within the organization via the SCIM API.

Note: Only users who are direct members of the specified groups will be ingested. The synchronization does not cascade to nested groups.

SCIM Attribute Description Required Type
displayName Unique name of group Yes string
externalId External reference identifier of the group No string
members The zero or more users who are members of the group. Each user is identified by their OutThink-assigned unique user id. No string

Supported Operations

  • POST /Groups
    Creates a group.
  • GET /Groups/$groupID
    Gets a single group.
  • GET /Groups
    Search for groups with filtering, via GET.
  • POST /Groups/.search
    Search for groups with filtering, via POST.
  • PUT /Groups/$groupID
    Updates a single group (non-member attributes and members).
  • PATCH /Groups/$groupID
    Updates a single group (add, replace, remove selected non-member attributes; add, remove members).
  • DELETE /Groups/$groupID
    Deletes a single group.

Example Request

The following is an example request received by the OutThink SCIM API for creating a group.

# Example request to create a group
POST https://outthink-api.azure-api.net/scim/Organizations/xxxxxxxxxxxxxx/v2/Groups
Content-Type: application/scim+json
Authorization: Bearer xxxxxxxxxxxxxx

{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group"
  ],
  "displayName": "Marketing",
  "externalId": "81ef27b8-80ce-4c24-ba1e-067048806ecf",
  "members": [
    {
      "value": "e09df84b-4717-44bf-96ca-2cfa4e950b5b"
    },
    {
      "value": "b1952375-b78b-40bd-8848-80faab1452ae"
    }
  ]
}

SCIM Implementations

OutThink have provided documentation to assist you in setting up a SCIM integration with the following providers. For any provider not listed below, consult your product documentation.

Was this helpful?

3 / 0