Microsoft Entra ID Connector
The Java-based Microsoft Entra ID connector integrates with the Identity Java Connector Integration Framework, using the Microsoft Graph API for secure communication and management of Microsoft Entra ID resources.
Overview
The connector operates via the Microsoft Graph API at https://graph.microsoft.com, authorized by OAuth at https://login.microsoftonline.com/TenantID/oauth2/token. It is implemented in the class EntraIDConnector within net.atos.dirx.dxi.connector.azure, supporting add, modify, delete, and search operations, translating requests/responses to SPMLv1 format. All communication is secured via SSL/TLS.
Prerequisites
-
Based on Microsoft Graph API v1.0 (functionality is limited to this version).
-
It uses OAuth 2.0 with Application Secret for authentication.
-
Supports user, group/teams, role and subscribedSku objects.
-
Navigation properties memberOf, manager and owner are handled as objectId values.
-
Only one valid Microsoft Entra ID license (subscribed sku) is supported.
|
Nested group assignment is not supported. |
Configuration
Configuration is provided via XML, either as standard properties (attributes of <connection>) or non-standard properties (<property> sub-elements).
| Property | Type | Description |
|---|---|---|
|
String |
Required. This property provides information about the host name or IP address of the Graph API endpoint. Example: graph.microsoft.com |
|
Boolean |
Required. This value enables SSL/TLS authentication of a Graph API server and secures the communication line. |
|
String |
Required. This property is the Application ID that identifies DirX Identity as a Graph API client. This ID is also bound to the Application Secret used as a password and is used for OAuth service. Example: abcd1234-5678-efgh-ijkl-9876mnopqrst |
|
String |
Required. The password is used as a symmetric key for communication between the Microsoft Entra ID connector and an OAuth service. Example: |
|
String |
Required. This is the Directory Type Example: Microsoft 365 |
| Property | Type | Description |
|---|---|---|
|
String |
Required. This property is the full URL of the OAuth service. The URL format is https://OAuthServer/TenantID/OAuthPath. Example: https://login.microsoftonline.com/12345678-9abc-def0-1234-56789abcdef0/oauth2/token |
|
String |
Required. This property provides the path to the latest Graph API Version and is also used for building endpoint URL. Use only valid values in the correct format. The default value is v1.0. |
|
String |
(Optional). This property provides information about the host name or IP address of the HTTP proxy server. Do not use authenticated proxy servers. If the access to the proxy server requires authentication, deploy another local transparent proxy server that can access the authenticated one. Use only the local proxy server instead. |
|
String |
(Optional). This property provides information about the port number of the HTTP proxy server. Do not use authenticated proxy servers. See the description for proxyHost for more details |
<connector className="net.atos.dirx.dxi.connector.azure.EntraIDConnector" name="TS" role="connector">
<connection password="<password>" server="graph.microsoft.com" ssl="TRUE" type="EntraID" user="11111111-2222-3333-4444-555555555555">
<property name="proxyHost" value="proxy"/>
<property name="proxyPort" value="85"/>
<property name="authEndpoint" value="https://login.microsoftonline.com/12345678-1234-1234-1234-123456789012/oauth2/token"/>
<property name="path" value="v1.0"/>
</connection>
</connector>
Managing Microsoft Entra ID Groups
Supported group types:
-
Microsoft 365 groups (Public, Private, HiddenMembership)
-
Microsoft 365 teams groups (Public, Private)
-
Security groups
|
For migration info: https://docs.microsoft.com/en-us/microsoft-365/admin/manage/upgrade-distribution-lists?view=o365-worldwide
Security and Microsoft 365 groups
In DirX Identity you can manage these groups on Microsoft Entra ID
-
Security
-
Microsoft 365 — Public (Default)
-
Microsoft 365 — Private
-
Microsoft 365 — HiddenMembership
-
Microsoft 365 — Private Teams
-
Microsoft 365 — Public Teams
|
For more information, see microsoft online documentation
Group Creation Properties
The following table lists the properties that are required when you create a group. Specify other writable properties as necessary for your group
| Property | Type | Description |
|---|---|---|
displayName |
String |
The name to display in the address book for the group. Maximum length: 256 characters. Required. |
mailEnabled |
Boolean |
Set to |
mailNickname |
String |
The mail alias for the group, unique for Microsoft 365 groups in the organization. The Maximum length is 64 characters. This property can contain only characters in the ASCII character set 0–127 except the following: |
securityEnabled |
Boolean |
Set to true for security-enabled groups, including Microsoft 365 groups. Required. NOTE: Groups created using the Microsoft Entra admin center or the Azure portal always have securityEnabled initially set to |
| Property | Type | Description |
|---|---|---|
description |
String |
Specify a description for the group. The maximum string length is 1024 characters. |
owners |
String[] |
Collection that represents the group owners. |
members |
String[] |
Collection that represents the group members. |
visibility |
String |
Specify the visibility of a Microsoft 365 group. Possible values are: Private: owner permission is needed to join the group. Non-members cannot view the contents of the group. Public: anyone can join the group without needing owner permission. Anyone can view the contents of the group. HiddenMembership: owner permission is needed to join the group. Non-members cannot view the contents of the group. Non-members cannot see the members of the group. Administrators (global, company, user, and (helpdesk) can view the membership of the group. The group appears in the global address book (GAL). Empty: Interpreted as Public. |
resourceProvisioningOptions |
Any group that has a team has a resourceProvisioningOptions property that contains |
groupTypes Options
Use the groupTypes property to control the type of group and its membership, as described in the Microsoft document:
| Type of group | Assigned membership | Dynamic membership |
|---|---|---|
Microsoft 365 (aka unified group) |
["Unified"] |
["Unified","DynamicMembership"] |
Dynamic |
[] (null) |
["DynamicMembership"] |
| Microsoft Entra ID Connector does not support groupTypes=“DynamicMembership.” |
Mapping groupType and dxrType
The following table shows the mapping between MS Graph API property groupType and DirX Identity property dxrType values for the supported Microsoft Entra ID groups.
| Type of group | Attribute value (MS Entra ID) | dxrType value (DXI) |
|---|---|---|
Security Group |
securityEnabled=true; mailEnabled=false |
SecurityGroup |
Microsoft 365 — Public |
securityEnabled=true or false; mailEnabled=true; groupTypes=Unified; visibility=Public |
MS365GroupPublic |
Microsoft 365 — Private |
securityEnabled=true or false; mailEnabled=true; groupTypes=Unified; visibility=Private |
MS365GroupPrivate |
Microsoft 365 — HiddenMembership |
securityEnabled=false; mailEnabled=true; groupTypes=Unified; visibility=HiddenMembership |
MS365GroupHiddenMembership |
Microsoft 365 — Public Teams |
securityEnabled=false; mailEnabled=true; groupTypes=Unified; visibility=Public; resourceProvisioningOptions=Team |
MS365GroupPublicTeams |
Microsoft 365 — Private Teams |
securityEnabled=false; mailEnabled=true; groupTypes=Unified; visibility=Private; resourceProvisioningOptions=Team |
MS365GroupPrivateTeams |
Not supported groups (read-only) |
||
Distribution Group |
securityEnabled=false; mailEnabled=true; groupTypes=[] |
DistributionGroup |
Mail-Enabled Security Group |
securityEnabled=true; mailEnabled=true; groupTypes=[] |
MailEnabledSecurityGroup |
Teams (Teams groups)
A team in Microsoft Teams is a collection of channel objects. A channel represents a topic, and therefore logical isolation of discussion, within a team.
The procedure for creating a team is the same as for Microsoft 365 groups with some additions.
|
Resource provisioning options
resourceProvisioningOptions is a string collection that specifies the resources that are associated with the Microsoft 365 group.
| Supported values for resourceProvisioningOptions | Description |
|---|---|
Team |
If set, the Microsoft 365 group is associated with a Teams team. |
Filtering Entra-ID Objects
The Microsoft Entra ID connector supports filtering of accounts, groups, and roles channels via the Microsoft Graph $filter query parameter. Use DirX Identity Manager to set the filter in the respective channel. For example, you can define a filter to restrict synchronization to specific AD objects, as shown in the following dialog:
|
The following limitations apply
|
| For more information on Microsoft Graph query parameters, see the Microsoft document: https://docs.microsoft.com/en-us/graph/query-parameters |
Using the $filter Parameter on User and Group Resources
You can use the $filter query parameter on user and group resource types to retrieve
-
A subset of a collection
-
Relationships, like members, memberOf, transitiveMembers, and transitiveMemberOf. For example, get all the security groups of which I am a member.
HTTP GET https://graph.microsoft.com/v1.0/users?$filter=startswith(displayName,'J')
The following table shows currently supported and unsupported Microsoft Graph logical operators for MS Entra ID user and group resources and how they correspond to DirX Identity and DirX DSML operators
| Graph API | MS Entra ID Resources (User, Group) | DirX Identity Manager | DirX DSML |
|---|---|---|---|
equals (eq) |
$filter=givenName eq ‘Max’ |
equals |
<filter><dsml:equalityMatch name="givenName"><dsml:value>Smith</dsml:value>… |
in (in) |
unsupported |
unsupported |
unsupported |
not equals (ne) |
unsupported |
not equals |
<filter><dsml:not><dsml:equalityMatch name="givenName><dsml:value>Smith</dsml:value>… |
greater than (gt) |
unsupported |
unsupported |
unsupported |
greater than or equals (ge) |
$filter=createdDateTime ge 2020-08-01 |
greater than or equal to |
<filter><greaterOrEqual name="givenName"><dsml:value>Smith</dsml:value>… |
less than (lt) |
unsupported |
unsupported |
unsupported |
less than or equals (le) |
$filter= createdDateTime le 2014-08-01 |
less than or equal to |
<filter><lessOrEqual name="givenName"><dsml:value>Smith</dsml:value>… |
unsupported |
unsupported |
contains |
<filter><dsml:substrings name="givenName"><dsml:any>Smith</dsml:any>… |
startswith |
$filter=startswith(givenName=‘Max’) |
begin with |
<filter><dsml:substrings name="givenName"><dsml:initial>Smith</dsml:initial>… |
unsupported |
unsupported |
ends with |
<filter><dsml:substrings name="givenName"><dsml:final>Smith</dsml:final>… |
unsupported |
unsupported |
is present |
<filter><dsml:present name="givenName"/></filter> |
and() |
$filter=startswith(givenName=‘Max’') and startswith(surName='Smith') |
and |
<filter><dsml:and>… |
or() |
$filter=startswith(givenName=‘Max’) or startswith(surName‘Smith’) |
or |
<filter><dsml:or>… |
not() |
unsupported |
not |
<filter><dsml:not>… |
|
As shown in the table, the $filter operators ne, gt, lt, not aren’t supported for Microsoft Entra ID resources. The contains string operator is currently not supported on any Microsoft Graph resource. Not every Microsoft Entra ID user and group object property supports filter query. Check the documentation for the resource to see which property is filterable |
|
For more information about query parameters, see the Microsoft documentation at In these documents, only the properties marked with Supports $filter are supported in Microsoft Graph API. |
Using the $filter Parameter on directoryRole Resources
The directoryRole resource type represents a Microsoft Entra ID directory role (also called an administrator role).
…directoryRole?$filter=displayname eq ‘Helpdesk Administrator’
| For more information on the directoryRole resource type, see the document: https://docs.microsoft.com/en-us/graph/api/resources/directoryrole?view=graph-rest-1.0 |
Escaping Single Quotes
For requests that use single quotes, if any parameter values also contain single quotes, they must be double escaped; otherwise, the request will fail due to invalid syntax.
HTTP GET https://graph.microsoft.com/v1.0/me/messages?$filter=subject eq 'let''s meet for lunch?'
The string value 'let's meet for lunch?' has the single quote escaped.
| For more information on encoding query parameters, see the Microsoft document https://docs.microsoft.com/en-us/graph/query-parameters. |