scimgateway 5.5.4 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -15,7 +15,8 @@ Validated through IdP's:
15
15
  - SailPoint/IdentityNow
16
16
 
17
17
  Latest news:
18
-
18
+
19
+ - Major release **v6.0.0** introduces changes to API method response bodies (not SCIM-related) and a new method `publicApi()` for handling public path `/pub/api` requests with no authentication required. In addition, the configuration option `bearerJwtAzure.tenantIdGUID` has been replaced by `bearerJwt.azureTenantId`. See the version history for details.
19
20
  - Entra ID [Federated Identity Credentials](https://learn.microsoft.com/en-us/graph/api/resources/federatedidentitycredentials-overview?view=graph-rest-1.0) is now supported. Identity federation allows SCIM Gateway to access Microsoft Entra protected resources without needing to manage secrets
20
21
  - External JWKS (JSON Web Key Set) is now supported by JWT Authentication. These are public and typically frequent rotated by modern identity providers
21
22
  - [Azure Relay](https://learn.microsoft.com/en-us/azure/azure-relay/relay-what-is-it) is now supported for secure and hassle-free outbound communication — with just one minute of configuration
@@ -24,11 +25,11 @@ Latest news:
24
25
  - Remote real-time log subscription for centralized logging and monitoring. Using browser `https://<host>/logger`, curl or custom client API - see configuration notes
25
26
  - By configuring the chainingBaseUrl, it is now possible to chain multiple gateways in sequence, such as `gateway1->gateway2->gateway3->endpoint`. In this setup, gateway beave much like a reverse proxy, validating authorization at each step unless PassThrough mode is enabled. Chaining is also supported in stream subscriber mode
26
27
  - Email, onError and sendMail() supports more secure RESTful OAuth for Microsoft Exchange Online (ExO) and Google Workspace Gmail, alongside traditional SMTP Auth for all mail systems. HelperRest supports a wide range of common authentication methods, including basicAuth, bearerAuth, tokenAuth, oauth, oauthSamlBearer, oauthJwtBearer and Auth PassTrough
27
- - Major version **v5.0.0** marks a shift from JavaScript to native TypeScript and prioritizes [Bun](https://bun.sh/) over Node.js. This upgrade requires some modifications to existing plugins.
28
+ - Major release **v5.0.0** marks a shift from JavaScript to native TypeScript and prioritizes [Bun](https://bun.sh/) over Node.js. This upgrade requires some modifications to existing plugins.
28
29
  - **BREAKING**: [SCIM Stream](https://elshaug.xyz/docs/scim-stream) is the modern way of user provisioning letting clients subscribe to messages instead of traditional IGA top-down provisioning. SCIM Gateway now offers enhanced functionality with support for message subscription and automated provisioning using SCIM Stream
29
30
  - Authentication PassThrough letting plugin pass authentication directly to endpoint for avoid maintaining secrets at the gateway. E.g., using Entra ID application OAuth
30
31
  - Supports OAuth Client Credentials authentication
31
- - Major version **v4.0.0** getUsers() and getGroups() replacing some deprecated methods. No limitations on filtering/sorting. Admin user access can be linked to specific baseEntities. New MongoDB plugin
32
+ - Major release **v4.0.0** getUsers() and getGroups() replacing some deprecated methods. No limitations on filtering/sorting. Admin user access can be linked to specific baseEntities. New MongoDB plugin
32
33
  - ipAllowList for restricting access to allowlisted IP addresses or subnets e.g. Azure IP-range
33
34
  - General LDAP plugin configured for Active Directory
34
35
  - [PlugSSO](https://elshaug.xyz/docs/plugsso) using SCIM Gateway
@@ -249,17 +250,12 @@ Below shows an example of config\plugin-saphana.json
249
250
  "baseEntities": []
250
251
  }
251
252
  ],
252
- "bearerJwtAzure": [
253
- {
254
- "tenantIdGUID": null,
255
- "readOnly": false,
256
- "baseEntities": []
257
- }
258
- ],
259
253
  "bearerJwt": [
260
254
  {
261
255
  "secret": null,
262
256
  "publicKey": null,
257
+ "wellKnownUri": null,
258
+ "azureTenantId": null,
263
259
  "options": {
264
260
  "issuer": null
265
261
  },
@@ -295,7 +291,7 @@ Below shows an example of config\plugin-saphana.json
295
291
  "auth": {
296
292
  "type": "oauth",
297
293
  "options": {
298
- "tenantIdGUID": null,
294
+ "azureTenantId": null,
299
295
  "clientId": null,
300
296
  "clientSecret": null
301
297
  }
@@ -417,9 +413,7 @@ Definitions in `endpoint` object are customized according to our plugin code. Pl
417
413
 
418
414
  - **auth.bearerToken** - Array of one or more bearer token objects - Shared token/secret (supported by Entra ID). Clear text value will become encrypted when gateway is started.
419
415
 
420
- - **auth.bearerJwtAzure** - Array of one or more JWT used by Azure SyncFabric. **tenantIdGUID** must be set to Entra ID Tenant ID.
421
-
422
- - **auth.bearerJwt** - Array of one or more standard JWT objects. Using **secret**, **publicKey** or **wellKnownUri** for signature verification. publicKey should be set to the filename of public key or certificate pem-file located in `<package-root>\config\certs` or absolute path being used. Clear text secret will become encrypted when gateway is started. For JWKS (JSON Web Key Set), the **wellKnownUri** must be set to identity provider well-known URI which will be used for lookup the jwks_uri key. **options.issuer** should normally be set for validation when using secret or publicKey, for JWKS the issuer will be included automatically. Other options may also be included according to the JWT standard.
416
+ - **auth.bearerJwt** - Array of one or more standard JWT objects. Using **secret**, **publicKey**, **wellKnownUri** or **azureTenantId** for signature verification. publicKey should be set to the filename of public key or certificate pem-file located in `<package-root>\config\certs` or absolute path being used. Clear text secret will become encrypted when gateway is started. For JWKS (JSON Web Key Set), the **wellKnownUri** must be set to identity provider well-known URI which will be used for lookup the jwks_uri key. **options.issuer** should normally be set for validation when using secret or publicKey, for JWKS (wellKnownUri), the issuer will be included automatically. Other options may also be included according to the JWT standard. When using Azure Entra ID provisioning through scimgateway, set **azureTenantId** to the Entra tenant id. When using Entra ID application accessing gateway use: `wellKnownUri=https://login.microsoftonline.com/{tenant-id}/v2.0/.well-known/openid-configuration` and `options.audience={application-id}`
423
417
 
424
418
  - **auth.bearerOAuth** - Array of one or more Client Credentials OAuth configuration objects. **`clientId`** and **`clientSecret`** are mandatory. clientSecret value will become encrypted when gateway is started. OAuth token request url is **/oauth/token** e.g. `http://localhost:8880/oauth/token`
425
419
 
@@ -461,7 +455,7 @@ Definitions in `endpoint` object are customized according to our plugin code. Pl
461
455
  - **email.auth** - Authentication configuration
462
456
  - **email.auth.type** - `oauth` or `smtp`
463
457
  - **email.auth.options** - Authentication options - note, different options for type oauth and smtp
464
- - **email.auth.options.tenantIdGUID (oauth/ExO)** - Entra tenant id or domain name
458
+ - **email.auth.options.azureTenantId (oauth/ExO)** - Entra tenant id or domain name
465
459
  - **email.auth.options.clientId (oauth/ExO)** - Entra OAuth application Client ID
466
460
  - **email.auth.options.clientSecret (oauth/ExO)** - Entra OAuth application Client Secret
467
461
  - **email.auth.options.serviceAccountKeyFile (oauth/Gmail)** - Google Service Account key json-file name located in the `package-root>\config\certs` directory unless absolute path being defined
@@ -675,7 +669,7 @@ Configuration showing connection settings:
675
669
 
676
670
  * baseUrls - Endpoint URL. Several may be defined for failower. There are retry logic on connection failures
677
671
  * auth.type - defines authentication being used: `basic`, `oauth`, `token`, `bearer`, `oauthSamlBearer` or `oauthJwtBearer`
678
- * auth.options - for each valid type there are different options. tenantIdGUID is special for Entra ID and serviceAccountKeyFile is special for Google. Using these will simplify and reduce options to be included. Also note we do not need to include baseUrls when using tenantIdGUID/serviceAccountKeyFile as long as endpoint is Entra ID (Microsoft Graph) or Google.
672
+ * auth.options - for each valid type there are different options. azureTenantId is special for Entra ID and serviceAccountKeyFile is special for Google. Using these will simplify and reduce options to be included. Also note we do not need to include baseUrls when using azureTenantId/serviceAccountKeyFile as long as endpoint is Entra ID (Microsoft Graph) or Google.
679
673
 
680
674
  Example using basic auth:
681
675
 
@@ -705,7 +699,7 @@ Example Entra ID (plugin-entra-id) using clientId/clientSecret:
705
699
  "auth": {
706
700
  "type": "oauth",
707
701
  "options": {
708
- "tenantIdGUID": "<tenantId>",
702
+ "azureTenantId": "<tenantId>",
709
703
  "clientId": "<clientId>",
710
704
  "clientSecret": "<clientSecret>"
711
705
  }
@@ -719,7 +713,7 @@ Example Entra ID (plugin-entra-id) using certificate secret:
719
713
  "auth": {
720
714
  "type": "oauthJwtBearer",
721
715
  "options": {
722
- "tenantIdGUID": "<tenantId>",
716
+ "azureTenantId": "<tenantId>",
723
717
  "clientId": "<clientId>",
724
718
  "tls": {
725
719
  "key": "key.pem",
@@ -736,7 +730,7 @@ Example Entra ID (plugin-entra-id) using federated credentials:
736
730
  "auth": {
737
731
  "type": "oauthJwtBearer",
738
732
  "options": {
739
- "tenantIdGUID": "<tenantId>",
733
+ "azureTenantId": "<tenantId>",
740
734
  "fedCred": {
741
735
  "issuer": "<https://FQDN-scimgateway>",
742
736
  "subject": "<entra id application object id - client id>",
@@ -1045,7 +1039,7 @@ To upgrade scimgateway docker image (remove the old stuff before running docker-
1045
1039
 
1046
1040
  Entra ID could do automatic user provisioning by synchronizing users towards SCIM Gateway, and gateway plugins will update endpoints.
1047
1041
 
1048
- Plugin configuration file must include **SCIM Version "2.0"** (scimgateway.scim.version) and either **Bearer Token** (scimgateway.auth.bearerToken[x].token) or **Entra ID Tenant ID GUID** (scimgateway.auth.bearerJwtAzure[x].tenantIdGUID) or both:
1042
+ Plugin configuration file must include **SCIM Version "2.0"** (scimgateway.scim.version) and either **Bearer Token** (scimgateway.auth.bearerToken[x].token) or **Entra ID Tenant ID** (scimgateway.auth.bearerJwt[x].azureTenantId) or both:
1049
1043
 
1050
1044
  scimgateway: {
1051
1045
  "scim": {
@@ -1059,9 +1053,9 @@ Plugin configuration file must include **SCIM Version "2.0"** (scimgateway.scim.
1059
1053
  "token": "shared-secret"
1060
1054
  }
1061
1055
  ],
1062
- "bearerJwtAzure": [
1056
+ "bearerJwt": [
1063
1057
  {
1064
- "tenantIdGUID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
1058
+ "azureTenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
1065
1059
  }
1066
1060
  ]
1067
1061
  }
@@ -1069,11 +1063,11 @@ Plugin configuration file must include **SCIM Version "2.0"** (scimgateway.scim.
1069
1063
  }
1070
1064
 
1071
1065
  `token` configuration must correspond with "Secret Token" defined in Entra ID
1072
- `tenantIdGUID` configuration must correspond with Entra ID Tenant ID
1066
+ `azureTenantId` configuration must correspond with Entra ID Tenant ID
1073
1067
 
1074
1068
  In Azure Portal:
1075
1069
  `Azure-Microsoft Entra ID-Enterprise Application-<My Application>-Provisioning-Secret Token`
1076
- Note, when "Secret Token" is left blank, Azure will use JWT (tenantIdGUID)
1070
+ Note, when "Secret Token" is left blank, Azure will use JWT (azureTenantId)
1077
1071
 
1078
1072
  `Azure-Microsoft Entra ID-Overview-Tenant ID`
1079
1073
 
@@ -1097,7 +1091,7 @@ Some notes related to Entra ID:
1097
1091
 
1098
1092
  - Entra ID SCIM [documentation](https://learn.microsoft.com/en-us/entra/identity/app-provisioning/use-scim-to-provision-users-and-groups)
1099
1093
 
1100
- - For using OAuth/JWT credentials, Entra ID configuration "Secret Token" (bearer token) should be blank. Plugin configuration must then include bearerJwtAzure.tenantIdGUID. Click "Test Connection" in Azure to verify
1094
+ - For using OAuth/JWT credentials, Entra ID configuration "Secret Token" (bearer token) should be blank. Plugin configuration must then include bearerJwt.azureTenantId. Click "Test Connection" in Azure to verify
1101
1095
 
1102
1096
  - Entra ID do a regular check for a "non" existing user/group. This check seems to be a "keep alive" to verify connection.
1103
1097
 
@@ -1217,7 +1211,7 @@ Note, for Symantec/Broadcom Provisioning we must use SCIM version 1.1
1217
1211
  }
1218
1212
  ],
1219
1213
 
1220
- Update `tenantIdGUID`, `clientID` and `clientSecret` according to what you copied from the previous Entra ID configuration.
1214
+ Update `azureTenantId`, `clientID` and `clientSecret` according to what you copied from the previous Entra ID configuration.
1221
1215
 
1222
1216
  If using proxy, set proxy.host to `"http://<FQDN-ProxyHost>:<port>"` e.g `"http://proxy.mycompany.com:3128"`
1223
1217
 
@@ -1226,13 +1220,13 @@ If using proxy, set proxy.host to `"http://<FQDN-ProxyHost>:<port>"` e.g `"http:
1226
1220
  "undefined": {
1227
1221
  "connection": {
1228
1222
  "baseUrls": [
1229
- "not in use for Entra ID when tenantIdGUID is defined"
1223
+ "not in use for Entra ID when azureTenantId is defined"
1230
1224
  ],
1231
1225
  "auth": {
1232
1226
  "type": "oauth",
1233
1227
  "options": {
1234
- "tokenUrl": "oauth token_url - not in use when tenantIdGUID is defined",
1235
- "tenantIdGUID": "Entra ID Tenant ID (GUID) or Primary domain name - only used by plugin-entra-id",
1228
+ "tokenUrl": "oauth token_url - not in use when azureTenantId is defined",
1229
+ "azureTenantId": "Entra ID Tenant ID (GUID) or Primary domain name - only used by plugin-entra-id",
1236
1230
  "clientId": "oauth client_id - Entra ID: Application ID",
1237
1231
  "clientSecret": "oauth client_secret - Entra ID: generated application secret value"
1238
1232
  }
@@ -1490,6 +1484,86 @@ MIT © [Jarle Elshaug](https://www.elshaug.xyz)
1490
1484
 
1491
1485
  ## Change log
1492
1486
 
1487
+ ### v6.0.0
1488
+
1489
+ **[MAJOR]**
1490
+
1491
+ - API method response bodies (no SCIM related) will now be returned "as-is". Previously response body had format `{ result: <content> }`. If response body is parsed by client, client must be changeed to reflect the new response body format.
1492
+ - New plugin API method `scimgateway.publicApi()` for handling public path `/pub/api` with no authentication required, please see `plugin-api`
1493
+ e.g. `GET /pub/api?model=Tesla`
1494
+ - Configuration `scimgateway.auth.bearerJwtAzure` is no longer supported. Instead use the new `scimgateway.auth.bearerJwt.azureTenantId` for allowing Entra ID initiated provisioning through scimgateway
1495
+
1496
+ **Old configuration:**
1497
+
1498
+ "bearerJwtAzure": [
1499
+ {
1500
+ "tenantIdGUID": {entra-tenant-id},
1501
+ "readOnly": false,
1502
+ "baseEntities": []
1503
+ }
1504
+ ],
1505
+
1506
+ **New configuration:**
1507
+
1508
+ "bearerJwt": [
1509
+ {
1510
+ "secret": null,
1511
+ "publicKey": null,
1512
+ "wellKnownUri": null,
1513
+ "azureTenantId": {entra-tenant-id},
1514
+ "options": {
1515
+ "issuer": null
1516
+ },
1517
+ "readOnly": false,
1518
+ "baseEntities": []
1519
+ }
1520
+ ],
1521
+
1522
+ - All existing configurations having key `tenantIdGUID` must be replaced with the new key `azureTenantId`. This also applies to endpoint configuration used by HelperRest()
1523
+
1524
+ **Old configuration:**
1525
+
1526
+ "email": {
1527
+ "auth": {
1528
+ "type": "oauth",
1529
+ "options": {
1530
+ "tenantIdGUID": null,
1531
+ "clientId": null,
1532
+ "clientSecret": null
1533
+ }
1534
+ },
1535
+
1536
+ **New configuration:**
1537
+
1538
+ "email": {
1539
+ "auth": {
1540
+ "type": "oauth",
1541
+ "options": {
1542
+ "azureTenantId": null,
1543
+ "clientId": null,
1544
+ "clientSecret": null
1545
+ }
1546
+
1547
+
1548
+ Example of HelperRest() endpoint configuration used by plugin-entra-id having tenantIdGUID replaced with azureTenantId:
1549
+
1550
+ "connection": {
1551
+ "baseUrls": [],
1552
+ "auth": {
1553
+ "type": "oauth",
1554
+ "options": {
1555
+ "azureTenantId": "Entra ID Tenant ID (GUID)",
1556
+ "clientId": "Entra ID Application ID",
1557
+ "clientSecret": "Entra ID Application secret value"
1558
+ }
1559
+ },
1560
+
1561
+ ### v5.5.5
1562
+
1563
+ [Improved]
1564
+ - Dependencies bump
1565
+ - Docker - `.dockerignore` included at root, same as `./config/docker/.dockerignore`
1566
+
1493
1567
  ### v5.5.4
1494
1568
 
1495
1569
  [Fixed]