Table of Contents


Overview

Azure Active Directory is Microsoft’s cloud identity service. It holds the user accounts people sign in with, the devices joined or registered to the organization, and the groups that tie the two together and drive access to everything from Teams channels to licensed applications. In a Microsoft-centric enterprise it is the authoritative answer to who works here, what they can reach, and which machines are theirs.

The ReadyWorks Azure Active Directory connector reads that directory through the Microsoft Graph API. It obtains an OAuth access token from the Microsoft identity platform, then calls Graph endpoints and writes the responses into ReadyWorks staging tables. Six inbound job templates ship: users, devices, groups, the members of each group, the owners of each group, and one generic template for calling any other Graph endpoint.

Identity is usually the spine of a ReadyWorks data model. Device records from discovery tools carry a machine name and a serial number; they become actionable once resolved to a named person with a department, a manager and a location. That is what this connector supplies. Group membership matters just as much for transformation work, because groups are how access and licensing are actually assigned, so they determine what has to follow a user to a new machine or a new platform.

The connector is bidirectional. Three outbound job templates ship for group lifecycle management: create, update and delete.

NOTE: Microsoft renamed Azure Active Directory to Microsoft Entra ID. The connector, its description and its endpoints still use the Azure AD name, and the Graph API paths are unchanged, so nothing needs reconfiguring. Expect to see both names in Microsoft’s own documentation.

NOTE: All six inbound templates and all three outbound templates ship with Enabled set to No. Activate the ones you need after you create the connection.

Connector Properties

PropertyValue
IdentifierAZURE_AD
NameAzure Active Directory
DescriptionConnector for processing Azure Active Directory data using MS Graph.
Job TypesBoth Inbound and Outbound
Order120
EnabledYes
LockedYes
Block UpdateNo
Single AuthenticationNo
Windows OnlyNo
Connector Version2026-03-15
HooksNone
Additional Job FieldsNone
Image

Authentication Methods

Two methods ship with this connector. Both are enabled, both are marked as default, and both use the json_rest_api.php driver. Both perform an OAuth client credentials exchange against the Microsoft identity platform and then send the returned token as a bearer token on every Graph call. The difference is what proves the application’s identity: a client secret, or a certificate.

MethodIdentifierBase MethodScriptOrderEnabledConfig Fields
MS Graph AuthenticationAZURE_AD_ms_graphJSON Rest API_ms_graphjson_rest_api.php10Yes9
MS Graph Certificate Based AuthenticationAZURE_AD_f56cc6b7d2AZURE_AD_f56cc6b7d2json_rest_api.php20Yes10

NOTE: Both methods require an app registration in the tenant with application permissions granted for the Graph resources you intend to read, and admin consent recorded. The connection supplies the tenant id, the application id and the credential; it does not grant the permissions.

Method 1: MS Graph Authentication (AZURE_AD_ms_graph)

Connect to an Azure Active Directory using MS Graph API

Client secret authentication. ReadyWorks posts the application id, the client secret and a scope of .default to the tenant’s token endpoint, reads the access token out of the response, and sends it as Authorization: Bearer on every Graph call.

Connection Configuration Fields (9)

OrderLabelTypeRequiredDefaultMax LenTooltip
10API DomaintextYeshttps://graph.microsoft.com255Enter API domain of the Connection
30Server Temporary Working PathtextYesstorage/etl5255Enter path where temporary files are stored during data processing (exclude starting and ending backslash)
60Tenant IdpasswordYes64000Enter Microsoft Graph directory (tenant) Id of the Connection
70App ID / Client IDpasswordYes64000Enter Microsoft Graph application (application / client) Id of the Connection
80Client SecretpasswordYes64000Enter Microsoft Graph client secret of the Connection
190OAuth POST Request Full URItextYeshttps://login.microsoftonline.com/%auth_value_1%/oauth2/v2.0/token500Enter URI to send a POST OAuth request to the identity platform to acquire an access token
200Access Token JSON NodetextNoaccess_token255Enter JSON data node for access token
240Single AuthenticationradioYesNoChoose if authentication is only to be done once and not on each enumeration or pagination loop
250Additional Job Fieldsfields_listNoEnter list of additional fields to add to staging data for all jobs

NOTE: The OAuth POST Request Full URI default contains the token %auth_value_1%, which resolves to the Tenant Id entered above. Leave it in place rather than typing the tenant id into the URL, so the two cannot drift apart.

Authentication Configuration

Headers sent on the authentication call:

HeaderValueBase64
Content-Type:application/x-www-form-urlencodedOff

Headers sent on the data calls:

HeaderValueBase64
Content-Type:application/jsonOff
Authorization: Bearer%auth_data%Off

Authentication request body:

KeyValue
client_id%auth_value_2%
client_secret%auth_value_3%
grant_typeclient_credentials
scopehttps://graph.microsoft.com/.default

cURL options:

OptionAuthentication CallData Calls
USERAGENTMozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0Same
SSL_VERIFYHOSTfalsefalse
SSL_VERIFYPEERfalsefalse
RETURNTRANSFERtruetrue
FOLLOWLOCATIONtruetrue
FAILONERRORtruetrue
POSTtrueNot set

Method 2: MS Graph Certificate Based Authentication (AZURE_AD_f56cc6b7d2)

Connect to an Azure Active Directory using MS Graph API with Certificate

Certificate authentication. Instead of a client secret, the connection stores a public certificate and its private key, both masked. This method carries an authentication flag, MS_GRAPH_JWT, which tells the engine to build and sign a JWT client assertion rather than sending a secret. Only two methods in the whole connector library carry any authentication flag: this one and Microsoft Intune’s certificate-based method, which uses the same flag. Use it where policy forbids long-lived client secrets, or where the app registration is already set up for certificate credentials.

Connection Configuration Fields (10)

OrderLabelTypeRequiredDefaultMax LenTooltip
10Server Temporary Working PathtextYesstorage/etl5255Enter path where temporary files are stored during data processing (exclude starting and ending backslash)
10API DomaintextYeshttps://graph.microsoft.com255Enter API domain of the Connection
60Tenant IdpasswordYes64000Enter Microsoft Graph directory (tenant) Id of the Connection
70App ID / Client IDpasswordYes64000Enter Microsoft Graph application (application / client) Id of the Connection
80Public CertificatepasswordNo64000Upload Microsoft Graph Public Certificate file
90Private KeypasswordNo64000Upload Microsoft Graph Private Key file
190OAuth POST Request Full URItextYeshttps://login.microsoftonline.com/%auth_value_1%/oauth2/v2.0/token500Enter URI to send a POST OAuth request to the identity platform to acquire an access token
200Access Token JSON NodetextNoaccess_token255Enter JSON data node for access token
240Single AuthenticationradioYesNoChoose if authentication is only to be done once and not on each enumeration or pagination loop
250Additional Job Fieldsfields_listNoEnter list of additional fields to add to staging data for all jobs

NOTE: Server Temporary Working Path and API Domain both carry display order 10 in this method, so their position relative to each other in the connection form is not guaranteed. Both fields work; only their order is affected. The same collision appears on several other connectors, including Microsoft Intune, Everpure, Hitachi Vantara, Intel Redfish, Qumulo, Scality and Veeam.

Authentication Configuration

Headers are identical to Method 1: Content-Type: application/x-www-form-urlencoded on the authentication call, then Content-Type: application/json and Authorization: Bearer %auth_data% on the data calls. The cURL options are also identical. Only the request body differs.

Authentication request body:

KeyValue
tenant_id%auth_value_1%
client_id%auth_value_2%
grant_typeclient_credentials
scopehttps://graph.microsoft.com/.default
pub_cert%auth_value_3%
pri_key%auth_value_4%

NOTE: The certificate and key are not posted to Microsoft as they appear above. The MS_GRAPH_JWT flag intercepts them and uses them to sign a client assertion, which is what actually reaches the token endpoint.

Inbound Job Fields Enabled (44)

These are the settings the job editor shows when you create or edit an inbound job on an Azure Active Directory connection. It is the full REST form, including three levels of enumeration.

OrderLabelTypeRequiredDefaultTooltip
10Job DescriptiontextYesEnter description of the Job
20Job SchedulelookupYesDailySelect frequency Job should run
30EnabledradioYesYesChoose if Job is enabled
40Use Unparsed DataradioNoNoChoose if you wish to parse the incoming data, or leave it in its raw format
50Log Raw API CallsradioYesNoChoose if raw API calls are logged
70Destination TabletextYesEnter name of the destination table
80Data IdentitytextNoEnter identity of the Job
120Append New Data to Existing TablesradioNoNoChoose if new data will append to the existing destination table, or will create a new destination table
130Fields to IndextextNoEnter fields to index
170Method TypeselectYesGETSelect method type of the Job
190API End PointtextNoEnter API end point of the Job
200API Data Parametersfields_listNoEnter API data parameters of the Job
210Body Data Sending MethodselectYesJSON Encoded DataSelect method for sending the body data
220Raw JSON Body DatatextareaNoEnter the raw JSON body to send. Do not use body selections in the API Parameters if this is used.
230API Return Data NodetextNoEnter API return data node of the Job
250Pagination TypeselectNoNoneSelect request paging type of the Job
270API Pagination NodetextNoEnter API pagination node of the Job
280Pagination Offset StarttextNoEnter request paging offset start of the Job
290Pagination LimittextNoEnter request pagination limit of the Job
300Pagination Termination NodetextNoEnter request paging termination node and value of the Job
310Maximum API CallstextNoEnter maximum number of API calls for the Job to make
320Enumeration 1 TypeselectNoNoneEnter enumeration level 1 type
330Enumeration 1 ETL JoblookupNoSelect ETL job for the enumeration values
340Enumeration 1 Data Typedata_typeNoSelect the data type and fields for enumeration 1 values
350Enumeration 1 Keys End PointtextNoEnter enumeration 1 keys end point of the Job
360Enumeration 1 NodetextNoEnter enumeration 1 node of the Job
370Enumeration 1 Fieldsfields_listNoEnter enumeration 1 fields of the Job
380Enumeration 2 TypeselectNoNoneEnter enumeration level 2 type
390Enumeration 2 ETL JoblookupNoSelect ETL job for the enumeration 2 values
400Enumeration 2 Data Typedata_typeNoSelect the data type and fields for enumeration 2 values
410Enumeration 2 Keys End PointtextNoEnter enumeration 2 keys end point of the Job
420Enumeration 2 NodetextNoEnter enumeration 2 node of the Job
430Enumeration 2 Fieldsfields_listNoEnter enumeration 2 fields of the Job
440Enumeration 3 TypeselectNoNoneEnter enumeration level 3 type
450Enumeration 3 ETL JoblookupNoSelect ETL job for the enumeration 3 values
460Enumeration 3 Data Typedata_typeNoSelect the data type and fields for enumeration 3 values
470Enumeration 3 Keys End PointtextNoEnter enumeration 3 keys end point of the Job
480Enumeration 3 NodetextNoEnter enumeration 3 node of the Job
490Enumeration 3 Fieldsfields_listNoEnter enumeration 3 fields of the Job
500Pause EnumerationtextNoEnter values for pausing enumeration every X calls for Y seconds
510Kill Enumeration on ErrorradioNoNoChoose to stop the enumeration loop on an error or continue processing the loop
520Additional Fieldsfields_listNoEnter list of additional fields to add to staging data
550Retry PausetextNoEnter values for retrying a failed API connection. Retry X times, waiting Y seconds between each try, with an API timeout of Z seconds.
560OrdertextYesEnter order of the Job

Inbound Job Templates (6)

Five templates call named Graph endpoints; the sixth is a blank starting point for any other endpoint. All five named templates read the value node and page through results using Graph’s @odata.nextLink.

#Job DescriptionDestination TableAPI End PointEnumeratesWhat It Pulls
1Usersazure_ad_users/v1.0/usersNoEvery user account in the tenant, restricted to a named set of 28 attributes: identity, contact details, job title, department, company, office location and the on-premises attributes that tie a cloud account back to a local Active Directory object.
2Rest GET APIapi_dataNot setNoA blank template. No endpoint, no data node, generic table name. Use it as the starting point for any Graph endpoint the other five do not cover.
3Computersazure_ad_computers/v1.0/devicesNoEvery device object registered or joined to the tenant, with the default Graph device property set. This is the cloud view of a machine, distinct from what a discovery agent reports.
4Groupsazure_ad_groups/v1.0/groupsNoEvery group in the tenant: security groups, Microsoft 365 groups and distribution lists, with their default properties.
5Group Membersazure_ad_group_members/v1.0/groups/%enum_id%/membersYesThe membership of every group, one call per group. Produces the user-to-group mapping that shows which people hold which access.
6Group Ownersazure_ad_group_owners/v1.0/groups/%enum_id%/ownersYesThe owners of every group, one call per group. Owners are who to contact before changing or retiring a group.

Job Template Configuration

Settings Common to All Six Templates

SettingValue
Job ScheduleDaily (15 1 * * *)
EnabledNo
Method TypeGET
Body Data Sending MethodJSON Encoded Data
Allow Empty TableYes
Append Files to Same Destination TableNo
Append New Data to Existing TablesNo
Use Unparsed DataNo
Convert UUID-Keyed Objects to RowsNo
Ignore XML AttributesNo
Log Raw API CallsNo

Settings That Vary by Template

TemplateIDOrderDestination TableAPI End PointReturn Data NodePagination
Users210azure_ad_users/v1.0/usersvalueNext Page Node, "@odata.nextLink"
Rest GET API310api_dataNot setNot setNone
Computers420azure_ad_computers/v1.0/devicesvalueNext Page Node, "@odata.nextLink"
Groups530azure_ad_groups/v1.0/groupsvalueNext Page Node, "@odata.nextLink"
Group Members640azure_ad_group_members/v1.0/groups/%enum_id%/membersvalueNext Page Node, "@odata.nextLink"
Group Owners750azure_ad_group_owners/v1.0/groups/%enum_id%/ownersvalueNext Page Node, "@odata.nextLink"

NOTE: Data Identity matches Destination Table on all six templates.

Enumeration Settings

Group Members and Group Owners both enumerate. Each first calls the enumeration endpoint to collect every group id, then calls its own endpoint once per group, substituting the id into %enum_id%.

SettingValue (both templates)
Enumeration 1 TypeAPI End Point
Enumeration 1 Keys End Point/v1.0/groups
Enumeration 1 Nodevalue
Enumeration 1 Fieldsenum_id_1 = id

NOTE: An enumeration field named enum_id_1 can be referenced either as %enum_id_1% or as %enum_id%. These two templates use the shorter form. Both resolve to the same value.

NOTE: These two jobs make one API call per group in the tenant. On a large tenant that is a lot of calls, and because Single Authentication defaults to No the connection re-authenticates on each loop. If either job runs long or hits Graph throttling, set Single Authentication to Yes on the connection, and consider setting Maximum API Calls and Pause Enumeration on the job.

API Data Parameters

Three templates restrict the properties Graph returns.

TemplateKeyValue
Users$selectid,displayName,givenName,mail,surname,userPrincipalName,businessPhones,city,companyName,country,department,employeeId,faxNumber,jobTitle,mailNickname,mobilePhone,officeLocation,onPremisesExtensionAttributes,onPremisesDistinguishedName,onPremisesDomainName,onPremisesImmutableId,onPremisesUserPrincipalName,otherMails,postalCode,state,streetAddress,usageLocation,userType
Group Members$selectid,displayName
Group Owners$selectid,displayName

NOTE: The Users $select list does not include accountEnabled, so the staged user table carries no indication of whether an account is active or disabled. If you need to tell leavers from current staff, which most joiner, mover and leaver work and most migration wave planning does, add accountEnabled to the parameter before enabling the job.

Outbound Job Fields Enabled (13)

OrderLabelTypeRequiredDefaultTooltip
10Job DescriptiontextYesEnter description of the Job
30EnabledradioYesYesChoose if Job is enabled
50Log Raw API CallsradioYesNoChoose if raw API calls are logged
170Method TypeselectYesGETSelect method type of the Job
180Data Sending MethodselectYesJSON Encoded DataSelect method for sending the outbound data
190API End PointtextNoEnter API end point of the Job
200API Data Parametersfields_listNoEnter API data parameters of the Job
210Body Data Sending MethodselectYesJSON Encoded DataSelect method for sending the body data
260Return Data Fields Listfields_listYesEnter return data fields of the Job
530Outbound Fields Listfields_listYesEnter outbound fields of the Job
540Ignore Empty Outbound FieldsradioNoYesIgnore, and do not include, any outbound fields that are empty and have no data
550Raw JSON Outbound TemplatetextareaNoEnter the raw JSON outbound template to send. This will replace any automated structures defined in the outbound fields.
560OrdertextYesEnter order of the Job

Outbound Job Templates (3)

Three templates cover the group lifecycle. Together they let a ReadyWorks process create a group for a migration wave, add or rename it as the wave changes, and remove it when the wave closes.

TemplateIDMethodAPI End PointOutbound FieldsReturn FieldsWhat It Does
Create Group8POST/v1.0/groups61Creates a group and returns its new id.
Delete Group9DELETE/v1.0/groups/%group_id%11Deletes the group whose id is supplied.
Update Group10PATCH/v1.0/groups/%group_id%71Changes properties on an existing group.

All three ship with Enabled set to No, Log Raw API Calls No, Body Data Sending Method and Data Sending Method both JSON Encoded Data, and Ignore Empty Outbound Fields Yes. Their orders are 10, 20 and 30.

Create Group (Template 8)

Posts a new group to Graph. Four fields are required, matching what Graph itself demands to create a group: a display name, a mail nickname, and the two flags that decide what kind of group it is. Returns the new group id, which a later Update or Delete job needs.

LabelNameTypeRequiredPattern
Display NamedisplayNameStringYes
Mail EnabledmailEnabledStringYes
Mail NicknamemailNicknameStringYes
Security EnabledsecurityEnabledStringYes
DescriptiondescriptionStringNo
Owner Id"owners@odata.bind"StringNo["https://graph.microsoft.com/v1.0/users/%value%"]

Return data field: Group Id from id.

NOTE: Owner Id is the one field with a pattern. ReadyWorks wraps the value you supply into the full Graph user URL shown above, so pass a bare user object id rather than a URL.

Delete Group (Template 9)

Removes a group. It takes only the group id, marked as a URI field so it substitutes into %group_id% in the endpoint path rather than being sent in the body.

LabelNameTypeRequiredPassed In
Group Idgroup_idStringYesURI

Return data field: Group Id from group_id.

NOTE: Deleting a group in Entra ID is not reversible from ReadyWorks. Microsoft retains deleted Microsoft 365 groups for a recovery period, but security groups behave differently. Confirm the group type before enabling a job built on this template.

Update Group (Template 10)

Patches an existing group. Group Id is required and travels in the URI; everything else is optional, and because Ignore Empty Outbound Fields is Yes, only the fields you populate are sent. That makes it safe to use the same job to change one property without overwriting the others.

LabelNameTypeRequiredPassed InPattern
Group Idgroup_idStringYesURI
Display NamedisplayNameStringNoBody
Mail EnabledmailEnabledStringNoBody
Mail NicknamemailNicknameStringNoBody
Security EnabledsecurityEnabledStringNoBody
DescriptiondescriptionStringNoBody
Owner Id"owners@odata.bind"StringNoBody["https://graph.microsoft.com/v1.0/users/%value%"]

Return data field: Group Id from id.

Last updated on 11/4/2026

Attachments