Search Knowledge Base by Keyword

Azure Active Directory

< Back

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

Property Value
Identifier AZURE_AD
Name Azure Active Directory
Description Connector for processing Azure Active Directory data using MS Graph.
Job Types Both Inbound and Outbound
Order 120
Enabled Yes
Locked Yes
Block Update No
Single Authentication No
Windows Only No
Connector Version 2026-03-15
Hooks None
Additional Job Fields None
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.

Method Identifier Base Method Script Order Enabled Config Fields
MS Graph Authentication AZURE_AD_ms_graph JSON Rest API_ms_graph json_rest_api.php 10 Yes 9
MS Graph Certificate Based Authentication AZURE_AD_f56cc6b7d2 AZURE_AD_f56cc6b7d2 json_rest_api.php 20 Yes 10

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)

Order Label Type Required Default Max Len Tooltip
10 API Domain text Yes https://graph.microsoft.com 255 Enter API domain of the Connection
30 Server Temporary Working Path text Yes storage/etl5 255 Enter path where temporary files are stored during data processing (exclude starting and ending backslash)
60 Tenant Id password Yes 64000 Enter Microsoft Graph directory (tenant) Id of the Connection
70 App ID / Client ID password Yes 64000 Enter Microsoft Graph application (application / client) Id of the Connection
80 Client Secret password Yes 64000 Enter Microsoft Graph client secret of the Connection
190 OAuth POST Request Full URI text Yes https://login.microsoftonline.com/%auth_value_1%/oauth2/v2.0/token 500 Enter URI to send a POST OAuth request to the identity platform to acquire an access token
200 Access Token JSON Node text No access_token 255 Enter JSON data node for access token
240 Single Authentication radio Yes No Choose if authentication is only to be done once and not on each enumeration or pagination loop
250 Additional Job Fields fields_list No Enter 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:

Header Value Base64
Content-Type: application/x-www-form-urlencoded Off

Headers sent on the data calls:

Header Value Base64
Content-Type: application/json Off
Authorization: Bearer %auth_data% Off

Authentication request body:

Key Value
client_id %auth_value_2%
client_secret %auth_value_3%
grant_type client_credentials
scope https://graph.microsoft.com/.default

cURL options:

Option Authentication Call Data Calls
USERAGENT Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0 Same
SSL_VERIFYHOST false false
SSL_VERIFYPEER false false
RETURNTRANSFER true true
FOLLOWLOCATION true true
FAILONERROR true true
POST true Not 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)

Order Label Type Required Default Max Len Tooltip
10 Server Temporary Working Path text Yes storage/etl5 255 Enter path where temporary files are stored during data processing (exclude starting and ending backslash)
10 API Domain text Yes https://graph.microsoft.com 255 Enter API domain of the Connection
60 Tenant Id password Yes 64000 Enter Microsoft Graph directory (tenant) Id of the Connection
70 App ID / Client ID password Yes 64000 Enter Microsoft Graph application (application / client) Id of the Connection
80 Public Certificate password No 64000 Upload Microsoft Graph Public Certificate file
90 Private Key password No 64000 Upload Microsoft Graph Private Key file
190 OAuth POST Request Full URI text Yes https://login.microsoftonline.com/%auth_value_1%/oauth2/v2.0/token 500 Enter URI to send a POST OAuth request to the identity platform to acquire an access token
200 Access Token JSON Node text No access_token 255 Enter JSON data node for access token
240 Single Authentication radio Yes No Choose if authentication is only to be done once and not on each enumeration or pagination loop
250 Additional Job Fields fields_list No Enter 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:

Key Value
tenant_id %auth_value_1%
client_id %auth_value_2%
grant_type client_credentials
scope https://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.

Order Label Type Required Default Tooltip
10 Job Description text Yes Enter description of the Job
20 Job Schedule lookup Yes Daily Select frequency Job should run
30 Enabled radio Yes Yes Choose if Job is enabled
40 Use Unparsed Data radio No No Choose if you wish to parse the incoming data, or leave it in its raw format
50 Log Raw API Calls radio Yes No Choose if raw API calls are logged
70 Destination Table text Yes Enter name of the destination table
80 Data Identity text No Enter identity of the Job
120 Append New Data to Existing Tables radio No No Choose if new data will append to the existing destination table, or will create a new destination table
130 Fields to Index text No Enter fields to index
170 Method Type select Yes GET Select method type of the Job
190 API End Point text No Enter API end point of the Job
200 API Data Parameters fields_list No Enter API data parameters of the Job
210 Body Data Sending Method select Yes JSON Encoded Data Select method for sending the body data
220 Raw JSON Body Data textarea No Enter the raw JSON body to send. Do not use body selections in the API Parameters if this is used.
230 API Return Data Node text No Enter API return data node of the Job
250 Pagination Type select No None Select request paging type of the Job
270 API Pagination Node text No Enter API pagination node of the Job
280 Pagination Offset Start text No Enter request paging offset start of the Job
290 Pagination Limit text No Enter request pagination limit of the Job
300 Pagination Termination Node text No Enter request paging termination node and value of the Job
310 Maximum API Calls text No Enter maximum number of API calls for the Job to make
320 Enumeration 1 Type select No None Enter enumeration level 1 type
330 Enumeration 1 ETL Job lookup No Select ETL job for the enumeration values
340 Enumeration 1 Data Type data_type No Select the data type and fields for enumeration 1 values
350 Enumeration 1 Keys End Point text No Enter enumeration 1 keys end point of the Job
360 Enumeration 1 Node text No Enter enumeration 1 node of the Job
370 Enumeration 1 Fields fields_list No Enter enumeration 1 fields of the Job
380 Enumeration 2 Type select No None Enter enumeration level 2 type
390 Enumeration 2 ETL Job lookup No Select ETL job for the enumeration 2 values
400 Enumeration 2 Data Type data_type No Select the data type and fields for enumeration 2 values
410 Enumeration 2 Keys End Point text No Enter enumeration 2 keys end point of the Job
420 Enumeration 2 Node text No Enter enumeration 2 node of the Job
430 Enumeration 2 Fields fields_list No Enter enumeration 2 fields of the Job
440 Enumeration 3 Type select No None Enter enumeration level 3 type
450 Enumeration 3 ETL Job lookup No Select ETL job for the enumeration 3 values
460 Enumeration 3 Data Type data_type No Select the data type and fields for enumeration 3 values
470 Enumeration 3 Keys End Point text No Enter enumeration 3 keys end point of the Job
480 Enumeration 3 Node text No Enter enumeration 3 node of the Job
490 Enumeration 3 Fields fields_list No Enter enumeration 3 fields of the Job
500 Pause Enumeration text No Enter values for pausing enumeration every X calls for Y seconds
510 Kill Enumeration on Error radio No No Choose to stop the enumeration loop on an error or continue processing the loop
520 Additional Fields fields_list No Enter list of additional fields to add to staging data
550 Retry Pause text No Enter values for retrying a failed API connection. Retry X times, waiting Y seconds between each try, with an API timeout of Z seconds.
560 Order text Yes Enter 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 Description Destination Table API End Point Enumerates What It Pulls
1 Users azure_ad_users /v1.0/users No Every 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.
2 Rest GET API api_data Not set No A 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.
3 Computers azure_ad_computers /v1.0/devices No Every 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.
4 Groups azure_ad_groups /v1.0/groups No Every group in the tenant: security groups, Microsoft 365 groups and distribution lists, with their default properties.
5 Group Members azure_ad_group_members /v1.0/groups/%enum_id%/members Yes The membership of every group, one call per group. Produces the user-to-group mapping that shows which people hold which access.
6 Group Owners azure_ad_group_owners /v1.0/groups/%enum_id%/owners Yes The 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

Setting Value
Job Schedule Daily (15 1 * * *)
Enabled No
Method Type GET
Body Data Sending Method JSON Encoded Data
Allow Empty Table Yes
Append Files to Same Destination Table No
Append New Data to Existing Tables No
Use Unparsed Data No
Convert UUID-Keyed Objects to Rows No
Ignore XML Attributes No
Log Raw API Calls No

Settings That Vary by Template

Template ID Order Destination Table API End Point Return Data Node Pagination
Users 2 10 azure_ad_users /v1.0/users value Next Page Node, "@odata.nextLink"
Rest GET API 3 10 api_data Not set Not set None
Computers 4 20 azure_ad_computers /v1.0/devices value Next Page Node, "@odata.nextLink"
Groups 5 30 azure_ad_groups /v1.0/groups value Next Page Node, "@odata.nextLink"
Group Members 6 40 azure_ad_group_members /v1.0/groups/%enum_id%/members value Next Page Node, "@odata.nextLink"
Group Owners 7 50 azure_ad_group_owners /v1.0/groups/%enum_id%/owners value Next 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%.

Setting Value (both templates)
Enumeration 1 Type API End Point
Enumeration 1 Keys End Point /v1.0/groups
Enumeration 1 Node value
Enumeration 1 Fields enum_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.

Template Key Value
Users $select id,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 $select id,displayName
Group Owners $select id,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)

Order Label Type Required Default Tooltip
10 Job Description text Yes Enter description of the Job
30 Enabled radio Yes Yes Choose if Job is enabled
50 Log Raw API Calls radio Yes No Choose if raw API calls are logged
170 Method Type select Yes GET Select method type of the Job
180 Data Sending Method select Yes JSON Encoded Data Select method for sending the outbound data
190 API End Point text No Enter API end point of the Job
200 API Data Parameters fields_list No Enter API data parameters of the Job
210 Body Data Sending Method select Yes JSON Encoded Data Select method for sending the body data
260 Return Data Fields List fields_list Yes Enter return data fields of the Job
530 Outbound Fields List fields_list Yes Enter outbound fields of the Job
540 Ignore Empty Outbound Fields radio No Yes Ignore, and do not include, any outbound fields that are empty and have no data
550 Raw JSON Outbound Template textarea No Enter the raw JSON outbound template to send. This will replace any automated structures defined in the outbound fields.
560 Order text Yes Enter 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.

Template ID Method API End Point Outbound Fields Return Fields What It Does
Create Group 8 POST /v1.0/groups 6 1 Creates a group and returns its new id.
Delete Group 9 DELETE /v1.0/groups/%group_id% 1 1 Deletes the group whose id is supplied.
Update Group 10 PATCH /v1.0/groups/%group_id% 7 1 Changes 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.

Label Name Type Required Pattern
Display Name displayName String Yes
Mail Enabled mailEnabled String Yes
Mail Nickname mailNickname String Yes
Security Enabled securityEnabled String Yes
Description description String No
Owner Id "owners@odata.bind" String No ["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.

Label Name Type Required Passed In
Group Id group_id String Yes URI

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.

Label Name Type Required Passed In Pattern
Group Id group_id String Yes URI
Display Name displayName String No Body
Mail Enabled mailEnabled String No Body
Mail Nickname mailNickname String No Body
Security Enabled securityEnabled String No Body
Description description String No Body
Owner Id "owners@odata.bind" String No Body ["https://graph.microsoft.com/v1.0/users/%value%"]

Return data field: Group Id from id.