Skip to main content
Version: On prem: 14.0.16

Omada Identity Graph API

Overview

Omada Identity customers can integrate access request workflows directly within other clients through Omada Identity Graph API. It is Omada Everywhere initiative, building capabilities for third parties to build clients for Omada’s access processes.

With the release of the May 2023 Cloud Update, Omada now supports third parties building Access Request clients based on version 2.0 of our Graph API.

note

Version 1.0 and Version 1.1 are not supported.

Version 2.0 supports:

  • Creating and submitting access requests to Omada cloud environments
  • List submitted access requests and their status

More specifically:

  • Request for one or more identities
  • Request for one or more resources
  • Support for Server-side hidden and Requires value settings for the Business Context field
  • Support for Server-side hidden and Requires value settings for the Reason field
  • Resources with visible attributes
  • Support multiple accounts
  • Set validity period
  • List of submitted access requests (requests or resource assignments)
  • Report request status
  • Filter on resources and attributes
info

For information on authentication, refer to the OAuth Auhentication section in the documentation.

Changelog

  • Version 2.6

    • Added new accessApprovalSurveyConfiguration query
    • Added new filter workflowStep filter in the
    • accessRequestApprovalSurveyQuestions query
  • Version 2.5

    New queries:

    • ResourceType
    • ResourceOwner
    • Contexts
    • accessRequestConfiguration
  • Version 2.4

    • New query accessRequestApprovalSurveyQuestions
    • New mutation SubmitRequestQuestions
    • New riskLevel fields to:
      • ResourceType
      • IdentityType
  • Version 2.3

    • Changed all Datetimes to return their values in UTC format
    • New query userSettings
  • Version 2.2

    New query extendAccessRequests

  • Version 2.1

    New queries:

    • identitiesCanRequestResource
    • extendableResourceAssignments

    New mutation extendAccess

    All queries which supports pagination and accessRequests have been wrapped into a new type, paginationListType, with fields:

    • Data
    • Total
    • Pages

    New types: identityResourcesInputType

    Changes to:

    • accessRequestAsResourcesInputType: reason has been made nullable, added identityResources
    • accessRequestAsTextInputType: reason has been made nullable
    • accessRequestType: validFrom and validTo has been made nullable, added reason and resourceAssignmentId
    • contextType: has been renamed to displayName

    New fields to:

    • resourceType: resourceCategory, resourceType, resourceFolder and accountTypes
    • accessRequestConfigurationType: isAccountRequired, isReasonRequired and defaultAccountType

    New fields to:

    • IdentityType: IdentityType and accounts
    • ResourceInputType: AccountInfo
  • Version 2.0

    New queries:

    • textBasedAccessRequest
    • textBasedAccessRequestsByIds
    • accessRequestsByIds There is a bug in this version when requesting access to a resource that contains child resources. The data is not loading, and an exception is being recorded in the event log.
  • Version 1.1

    Added support of Attributes in the Resource type.

  • Version 1.0

    Initial release of the API

Enabling the GraphiQL browser page

Prerequisites

  • Enable the new user interface (UI).
  • Graphiql browser page should only be enabled in test or development environments (not in production).

Steps

  1. Open the ticket is Omada Service Desk Support to set the API Documentation UI Enabled customer setting to TRUE.

  2. Enter the URL, for example: https://< instancename>.omada.cloud//ApiDoc.aspx?api=domain&version=X.X/.

note

If no version (X.X) is chosen, 1.0 will be selected by default.

Use of DomainApi to create Access Requests

  1. Use the basic queries to determine the lists of: reasons, systems, and optionally context.

    {
    accessRequest{

    reasons{
    id
    name
    }

    systems(filter: "Active directory", sortColumn: "name", sortOrder:DESC page: 1, rows: 5){
    id
    name
    }

    context(identityIds: ["cf12e9f1-1cf8-4a75-b189-26a0677fdc01"], ){
    id
    name
    }
    }
    }
    note

    The context property is optional.

  2. Use the resources query to, optionally with a systemId as input, get a list of applicable resources for the user to choose between. Be sure to respect the intent of the flag includeThirdPartyExcludedResources.

    {
    accessRequest{
    resources(systemId: "590c58a0-fdee-4d44-83ea-8b20911af15e", includeThirdPartyExcludedResources: false)
    id
    name
    }
    }
  3. Call the mutation createAccessRequest with the parameter accessRequest being an object that looks like this:

    mutation {
    createAccessRequest(accessRequest:{
    reason: "Need additional access",
    validFrom: "2022-06-01T11:11:11Z"
    validTo: "2022-10-01T11:11:11Z"
    businessContext: "1a53fe46-de0a-4d36-b160-25799a0082b7",
    identities: [{id: "cf12e9f1-1cf8-4a75-b189-26a0677fdc01"}],
    resources: [{id: "b366b716-4022-4328-98a1-36f9a1cc2525"}]
    }){
    id
    }
    }
  4. Use the accessRequest query to get status of your access-request.

    {
    accessRequests (ids: ["1f195673-e33b-44c7-b1b3-698e3f04a717"]){
    id
    beneficiary{
    id
    firstName
    lastName
    displayName
    }
    requestedBy{
    id
    firstName
    lastName
    }
    resource{
    id
    name
    }
    status{
    approvalStatus
    }
    }
    }
note

If you don’t include the ids-parameter, you will get all the access-requests created by the user.

The accessRequestComponents/resources query offers enhanced filtering capabilities. It allows filtering based on attributes such as resourceOwnerId, resourceTypeId, and contextObjectId, which points to objects belonging to a context associated with the resource.

  • resourceTypeId sample query:
query getResourceTypes {
accessRequestComponents {
resourceTypes {
data {
id
name
}
pages
total
}
}
  • resourceTypeId sample result:
{
"data": {
"accessRequestComponents": {
"resourceTypes": {
"data": [
{
"id": "847f63f6-dd32-40d5-8bab-2acd0c636d80",
"name": "Identity Manager Role"
},
{
"id": "5bd6c538-ae25-4e4d-85dc-069d0fa6ebf0",
"name": "Org. Unit Manager Role"
},
...
{
"id": "2c463d75-7e0d-4008-88e2-85996aa7d55b",
"name": "Omada Identity Account"
}
],
"pages": 0,
"total": 31
}
}
}
}
}
  • resourceOwnerId sample query:
query GetUsers {
accessRequestComponents {
users{
data {
id
displayName
}
pages
total
}
}
}
  • resourceOwnerId sample result:
{
"data": {
"accessRequestComponents": {
"users": {
"data": [
{
"id": "a3527a28-4365-4674-9797-939c995247f7",
"displayName": "System Administrator"
},
{
"id": "d3ef74e8-aea9-4a8a-9aa4-1c3e4f327331",
"displayName": "Eric Cantona"
},
{
"id": "2c86dfa7-823f-44df-9c2b-4e0abf6761a8",
"displayName": "Alex Ferguson"
},
{
"id": "57f6f100-3e33-4574-b150-d222ebdc246c",
"displayName": "Dennis Bergkamp"
}
],
"pages": 0,
"total": 4
}
}
}
}
}
  • contextObjectId sample query:
query GetDataObjectsInContext {
accessRequestComponents {
dataObjectsInContexts {
displayName
id
type
typeId
}
}
}
  • contextObjectId sample result:
{
"data": {
"accessRequestComponents": {
"dataObjectsInContexts": [
{
"displayName": "Customer identities [CUSTIDENTS]",
"id": "ba9c8ebb-3336-48ea-bfdf-b611e8bf7806",
"type": "OrgUnit",
"typeId": "3178bf72-a4c5-4aed-9084-6bb99aa42510"
},
{
"displayName": "Department1 [DEPT1]",
"id": "ea5ecc7b-c8f4-45a0-b8d0-a208c721b0fc",
"type": "OrgUnit",
"typeId": "3178bf72-a4c5-4aed-9084-6bb99aa42510"
},
{
"displayName": "Department2 [DEPT2]",
"id": "935a24e5-ce12-4258-8be2-25be1e2b6a92",
"type": "OrgUnit",
"typeId": "3178bf72-a4c5-4aed-9084-6bb99aa42510"
},
{
"displayName": "Organization [ORGANIZATION]",
"id": "60ccec0c-dad1-4df8-bb09-c77f15029fcd",
"type": "OrgUnit",
"typeId": "3178bf72-a4c5-4aed-9084-6bb99aa42510"
},
{
"displayName": "Technical identities [TECHIDENTS]",
"id": "31056ff3-e08b-4350-b94c-e8a508c64cc8",
"type": "OrgUnit",
"typeId": "3178bf72-a4c5-4aed-9084-6bb99aa42510"
}
]
}
}
}

References

For further reference on GraphQL APIs and GraphiQL, see the following resources: