Skip to main content

Data provisioning

Prerequisites

If you have chosen one of the template connectors and given it a new name, you will be configuring and saving a copy of the template connector. This means that your version is stored in Omada Identity, so that when Omada rolls out changes to the template connectors, your configurations remain intact in your own version. To use the default preconfigured task mappings, select the use default configuration option while enabling provisioning.

Provisioning configuration

ParameterDescription
Base addressSpecify the server address.
Entity rootThis is optional and is a fragment of the URL that points to provisioned entities, for example, /scim/v1.
Content-type headerChoose the format of the content. The default value is application/json.
Accept headerThe default value is application/json.
Authentication modeThe type of authentication to use for the Slack system. Depending on the type of authentication that you choose to use, you may see more or fewer settings.

For Slack connectivity, the only supported option is:

* OAuth2 – all OAuth mandatory * fields must be completed with proper value. These values can be found in your external vendor’s documentation of your Slack system.
Security protocolSecurity protocol of your Slack system.
Use numeric valuesSetting this to true will ensure that intType, longType, and referenceType values in the JSON payload are sent as numeric values and not strings. For referenceType properties the value is only set as a numeric value when the resolved value can be converted to a numeric value.
Query addressHere you can enter a base address for querying objects. It is appended to Base URI if specified, for example, http://baseaddress/query
Root resource pathThis parameter controls the root resource path used when resolving references and object id's. The default value is $.Resources\[0\] as defined in the SCIM standard
Test connectionThis field is optional. You can check this field to force the collector to test the defined connection before moving froward.
Test queryThis field only appears if the Test connection field is enabled. Here you can enter an optional test query used to verify the connection. The query must be relative to the base address, e.g., 'Users.' Entering a test query is important for a proper test for authentication methods which doesn't access the target system, e.g., basic authentication or static bearer token.

OAuth2 authentication

For Slack connectivity, the only supported option is Static token.

Static token grant

OAuth Static Token Provide your OAuth Static Token. This token is required for the Static token grant.

OAuth Static Token Type Provide a custom keyword that will be supplied in front of the static token. For Slack connectivity, the tokens are of Bearer type. If the field is left blank, the default Bearer value is also used.

Data model

The data model for Slack is extensible and consists of two sections: properties and objects.

Properties

The properties section serves as a repository of properties of all objects in the remote system that is subject to provisioning. A single property consists of the following attributes:

NameDescription
nameUnique name of the property. This name must match the property name in the target system.
requiredHere, you can specify if the property is required or not.
dataTypeThe data type of the property. By default, the type is a string. If this value is set to referenceType, the property will be used to either calculate reference properties or to calculate the object ID value.

Here, you can see the XML configuration for properties:

<connectorDataModel xmlns="http://schemas.omada.net/ops/2015/ConnectorDataModelML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" modelNamespace="Slack">
    <properties>
        <property name="schemas" multiValued="true"/>
        <property name="displayName" />
        <property name="groupId" />
        <property name="externalId" />
        <property name="userName" />
        <property name="userType" />
        <property name="urn:scim:schemas:extension:enterprise:1.0.employeeNumber" />
        <property name="urn:scim:schemas:extension:enterprise:1.0.department" />
        <property name="urn:scim:schemas:extension:enterprise:1.0.organization" />
        <property name="name.givenName" />
        <property name="name.familyName" />
        <property name="userId" dataType="referenceType" />
        <property name="Operations[].op"/>
        <property name="Operations[].path"/>
        <property name="Operations[].value[].id" dataType="referenceType"/>
        <property name="members[].value" dataType="referenceType"/>    
        <property name="members[].operation"/>
        <property name="emails[].value" />
        <property name="emails[].type" />
        <property name="password" />
        <property name="title" />
        <property name="active" />
    </properties>

Objects

Here, objects refers to a set of objects. Each object has a name property that must match one of the names in task mappings. For more about task mappings, see the Task mappings subchapter of the Omada Identity - Import and Onboarding Guide.

Inside an object, there are two sub nodes: objectDetails and objectProperties. For more information about each, see the following two subchapters.

objectDetails

ObjectDetails are used to provide details about how an object is treated. Each property can also have a reference property as part of its value. The name of the reference property must be in curly brackets, for example:

<objectProperty referenceObject="Profile"
referenceKeyProperty="Id"
referenceLookupProperty="Name">ProfileId</objectProperty>

When a property is used as part of an objectDetail, the property is removed from the JSON body of the HTTP request. If the property is needed for both the object detail and the JSON body, you must make another reference property with a different name.

The Slack Connector issues HTTP requests to the SCIM endpoints of the remote system. These endpoints are defined/calculated relatively and appended to a single baseAddress following the SCIM standards.

If the remote system has a custom SCIM implementation, you can use the objectDetails to define the custom properties in the Slack connector:

NameDescription
VerbForCreateUse this property if the remote system requires another verb for create operations where the default is POST.
VerbForUpdateUse this property if the remote system requires another verb for update operations where the default is POST.
VerbForDeleteUse this property if the remote system requires another delete for update operations where the default is POST.

objectProperty

The objectProperty element is used to determine a set of properties for an object.

When a property has the data type referenceType, it must have the following attributes:

NameDescription
isKeyA Boolean attribute that defines the key properties.
referenceObjectThe object to query.
referenceKeyPropertyThe property of an object that is the result of the query.
referenceLookupPropertyA string property that indicates the property in the referenced object to make a lookup against to find the reference object from the task property value.

Provisioning root properties and elements

In order to correctly provision root properties or elements for custom schemas they need to be correctly specified in the data model. Root properties must be specified in the following way:

urn:scim:schemas:extension:enterprise:1.0:.employeeNumber

Root elements must be specified in the following way:

urn:scim:schemas:extension:enterprise:1.0:.manager.managerId

Task mappings

The Omada Slack Connectivity provides the following mappings out of the box.

Slack Users

DestinationOperatorSource
Object IdMapObjectId
Object typeConstantusers
OperationMapOperation
userNameExpressionOperation=="Create" ? ROPE_AccountName : null
name.givenNameExpressionOperation=="Create" | Operation=="Update" ? ROPE_ATTR_FIRSTNAME : null
name.familyNameExpressionOperation=="Create" | Operation=="Update" ? ROPE_ATTR_LASTNAME : null
schemasExpressionOperation=="DeleteIfExists" ? null : "urn:scim:schemas:core:1.0"
passwordExpressionOperation=="Create" ? ROPE_ATTR_INITIALPASSWORD : null
titleExpressionOperation=="Create" | Operation=="Update" ? ROPE_ATTR_JOBTITLE : null
activeExpressionOperation=="Create" | Operation=="Update" | Operation=="DeleteIfExists" | Operation=="Delete" ? (ROPE_ATTR_IDENTITYSTATUS == "Terminated" ? "false" : "true") : null
userTypeExpressionOperation=="Create" ? ROPE_ATTR_IDENTITYCATEGORY : null
displayNameExpressionOperation=="Create" ? String.Format("0 1",ROPE_ATTR_FIRSTNAME,ROPE_ATTR_LASTNAME) : null
userIdExpressionOperation=="DeleteIfExists" | Operation=="Delete" | Operation=="Update" ? ROPE_AccountName : null
emails[].valueExpressionOperation=="Create" | Operation=="Update" ? ROPE_ATTR_EMAIL : null
emails[].typeExpressionOperation=="Create" | Operation=="Update" ? "work" : null

Slack Group Assignments

DestinationOperatorSource
Object IdMapROPE_ResourceKey
Object typeConstantGroups
OperationExpressionOperation == "Create" | Operation == "Delete" | Operation == "DeleteIfExists" ? "Update" : Operation
members[].operationExpressionOperation == "Delete" | Operation == "DeleteIfExists" ? "delete" : "add"
schemasExpression"urn:scim:schemas:core:1.0"
members[].valueMapROPE_AccountName