scimgateway 4.3.0 → 4.4.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 +41 -6
- package/config/plugin-api.json +28 -3
- package/config/plugin-entra-id.json +27 -1
- package/config/plugin-ldap.json +24 -0
- package/config/plugin-loki.json +24 -0
- package/config/plugin-mongodb.json +24 -0
- package/config/plugin-mssql.json +24 -0
- package/config/plugin-saphana.json +24 -0
- package/config/plugin-scim.json +28 -0
- package/config/plugin-soap.json +24 -0
- package/index.js +2 -2
- package/lib/plugin-api.js +187 -17
- package/lib/plugin-entra-id.js +22 -6
- package/lib/plugin-ldap.js +4 -5
- package/lib/plugin-loki.js +4 -14
- package/lib/plugin-mongodb.js +3 -16
- package/lib/plugin-mssql.js +3 -28
- package/lib/plugin-saphana.js +3 -21
- package/lib/plugin-scim.js +22 -31
- package/lib/plugin-soap.js +6 -30
- package/lib/scim-stream.js +13 -0
- package/lib/scimgateway.js +96 -20
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -16,8 +16,8 @@ Validated through IdP's:
|
|
|
16
16
|
|
|
17
17
|
Latest news:
|
|
18
18
|
|
|
19
|
+
- **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
|
|
19
20
|
- Authentication PassThrough letting plugin pass authentication directly to endpoint for avoid maintaining secrets at the gateway. Kubernetes health checks and shutdown handler support
|
|
20
|
-
- **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 Stream includes **SCIM Stream Gateway**, the next generation SCIM Gateway that supports message subscription and automated provisioning
|
|
21
21
|
- Supports OAuth Client Credentials authentication
|
|
22
22
|
- 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
|
|
23
23
|
- ipAllowList for restricting access to allowlisted IP addresses or subnets e.g. Azure IP-range
|
|
@@ -185,9 +185,9 @@ When maintaining a set of modifications it useful to disable the postinstall ope
|
|
|
185
185
|
const loki = require('./lib/plugin-loki')
|
|
186
186
|
// const mongodb = require('./lib/plugin-mongodb')
|
|
187
187
|
// const scim = require('./lib/plugin-scim')
|
|
188
|
-
// const soap = require('./lib/plugin-soap')
|
|
188
|
+
// const soap = require('./lib/plugin-soap') // prereq: npm install soap
|
|
189
189
|
// const mssql = require('./lib/plugin-mssql')
|
|
190
|
-
// const saphana = require('./lib/plugin-saphana')
|
|
190
|
+
// const saphana = require('./lib/plugin-saphana') // prereq: npm install hdb
|
|
191
191
|
// const entra = require('./lib/plugin-entra-id')
|
|
192
192
|
// const ldap = require('./lib/plugin-ldap')
|
|
193
193
|
// const api = require('./lib/plugin-api')
|
|
@@ -295,7 +295,31 @@ Below shows an example of config\plugin-saphana.json
|
|
|
295
295
|
"enabled": false,
|
|
296
296
|
"shutdownTimeout": 15000,
|
|
297
297
|
"forceExitTimeout": 1000
|
|
298
|
-
}
|
|
298
|
+
},
|
|
299
|
+
"stream": {
|
|
300
|
+
"baseUrls": [],
|
|
301
|
+
"certificate": {
|
|
302
|
+
"ca": null
|
|
303
|
+
},
|
|
304
|
+
"subscriber": {
|
|
305
|
+
"enabled": false,
|
|
306
|
+
"entity": {
|
|
307
|
+
"undefined": {
|
|
308
|
+
"nats": {
|
|
309
|
+
"tenant": null,
|
|
310
|
+
"subject": null,
|
|
311
|
+
"jwt": null,
|
|
312
|
+
"secret": null
|
|
313
|
+
},
|
|
314
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
315
|
+
"convertRolesToGroups": false,
|
|
316
|
+
"generateUserPassword": false,
|
|
317
|
+
"modifyOnly": false,
|
|
318
|
+
"replaceDomains": []
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
299
323
|
},
|
|
300
324
|
"endpoint": {
|
|
301
325
|
"host": "hostname",
|
|
@@ -420,6 +444,8 @@ Definitions in `endpoint` object are customized according to our plugin code. Pl
|
|
|
420
444
|
- **kubernetes.shutdownTimeout** - Number of milliseconds to wait before shutting down (default 15000).
|
|
421
445
|
- **kubernetes.forceExitTimeout** - Number of milliseconds before forceful exiting (default 1000).
|
|
422
446
|
|
|
447
|
+
- **stream** - See [SCIM Stream](https://elshaug.xyz/docs/scim-stream) for configuration details
|
|
448
|
+
|
|
423
449
|
- **endpoint** - Contains endpoint specific configuration according to our **plugin code**.
|
|
424
450
|
|
|
425
451
|
#### Configuration notes
|
|
@@ -1173,12 +1199,21 @@ MIT © [Jarle Elshaug](https://www.elshaug.xyz)
|
|
|
1173
1199
|
|
|
1174
1200
|
## Change log
|
|
1175
1201
|
|
|
1202
|
+
### v4.4.0
|
|
1203
|
+
|
|
1204
|
+
[Added]
|
|
1205
|
+
|
|
1206
|
+
- SCIM Gateway now offers enhanced functionality with support for message subscription and automated provisioning using [SCIM Stream](https://elshaug.xyz/docs/scim-stream)
|
|
1207
|
+
- plugin-entra-id, plugin-scim and plugin-api having updated `REST endpoint helpers-template` to address and resolve endpoint throttling
|
|
1208
|
+
|
|
1209
|
+
Note, module soap is not default included anymore. SOAP based plugins e.g., plugin-soap therefore needs `npm install soap` for including module in your package
|
|
1210
|
+
|
|
1176
1211
|
### v4.3.0
|
|
1177
1212
|
|
|
1178
1213
|
[Added]
|
|
1179
1214
|
|
|
1180
|
-
- configuration
|
|
1181
|
-
- configuration
|
|
1215
|
+
- configuration `scimgateway.scim.port` can now be set to 0 or removed for deactivating listener
|
|
1216
|
+
- configuration `cimgateway.scim.usePutSoftSync` set to `true` now includes additional logic that do not change existing user attributes not included in PUT body content
|
|
1182
1217
|
- createUser/createGroup no longer return id if id have not been returned by plugin or by getUser filtering on userName. Previously userName was returned as id when missing plugin logic.
|
|
1183
1218
|
- plugin-ldap supporting simpel filtering
|
|
1184
1219
|
- plugin-loki using baseEntity configuration for supporting multi loki endpoints
|
package/config/plugin-api.json
CHANGED
|
@@ -93,6 +93,30 @@
|
|
|
93
93
|
"enabled": false,
|
|
94
94
|
"shutdownTimeout": 15000,
|
|
95
95
|
"forceExitTimeout": 1000
|
|
96
|
+
},
|
|
97
|
+
"stream": {
|
|
98
|
+
"baseUrls": [],
|
|
99
|
+
"certificate": {
|
|
100
|
+
"ca": null
|
|
101
|
+
},
|
|
102
|
+
"subscriber": {
|
|
103
|
+
"enabled": false,
|
|
104
|
+
"entity": {
|
|
105
|
+
"undefined": {
|
|
106
|
+
"nats": {
|
|
107
|
+
"tenant": null,
|
|
108
|
+
"subject": null,
|
|
109
|
+
"jwt": null,
|
|
110
|
+
"secret": null
|
|
111
|
+
},
|
|
112
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
113
|
+
"convertRolesToGroups": false,
|
|
114
|
+
"generateUserPassword": false,
|
|
115
|
+
"modifyOnly": false,
|
|
116
|
+
"replaceDomains": []
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
}
|
|
97
121
|
},
|
|
98
122
|
"endpoint": {
|
|
@@ -101,8 +125,9 @@
|
|
|
101
125
|
"baseUrls": [
|
|
102
126
|
"http://fakerestapi.azurewebsites.net"
|
|
103
127
|
],
|
|
104
|
-
"
|
|
105
|
-
"
|
|
128
|
+
"oauth": null,
|
|
129
|
+
"bearerAuth": null,
|
|
130
|
+
"basicAuth": null,
|
|
106
131
|
"proxy": {
|
|
107
132
|
"host": null,
|
|
108
133
|
"username": null,
|
|
@@ -111,4 +136,4 @@
|
|
|
111
136
|
}
|
|
112
137
|
}
|
|
113
138
|
}
|
|
114
|
-
}
|
|
139
|
+
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"localhostonly": false,
|
|
5
5
|
"payloadSize": null,
|
|
6
6
|
"scim": {
|
|
7
|
-
"version": "
|
|
7
|
+
"version": "2.0",
|
|
8
8
|
"customSchema": null,
|
|
9
9
|
"skipTypeConvert": false,
|
|
10
10
|
"usePutSoftSync": false
|
|
@@ -92,6 +92,30 @@
|
|
|
92
92
|
"enabled": false,
|
|
93
93
|
"shutdownTimeout": 15000,
|
|
94
94
|
"forceExitTimeout": 1000
|
|
95
|
+
},
|
|
96
|
+
"stream": {
|
|
97
|
+
"baseUrls": [],
|
|
98
|
+
"certificate": {
|
|
99
|
+
"ca": null
|
|
100
|
+
},
|
|
101
|
+
"subscriber": {
|
|
102
|
+
"enabled": false,
|
|
103
|
+
"entity": {
|
|
104
|
+
"undefined": {
|
|
105
|
+
"nats": {
|
|
106
|
+
"tenant": null,
|
|
107
|
+
"subject": null,
|
|
108
|
+
"jwt": null,
|
|
109
|
+
"secret": null
|
|
110
|
+
},
|
|
111
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
112
|
+
"convertRolesToGroups": false,
|
|
113
|
+
"generateUserPassword": false,
|
|
114
|
+
"modifyOnly": false,
|
|
115
|
+
"replaceDomains": []
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
95
119
|
}
|
|
96
120
|
},
|
|
97
121
|
"endpoint": {
|
|
@@ -104,6 +128,8 @@
|
|
|
104
128
|
"clientId": "Application ID",
|
|
105
129
|
"clientSecret": "Generated application secret value"
|
|
106
130
|
},
|
|
131
|
+
"bearerAuth": null,
|
|
132
|
+
"basicAuth": null,
|
|
107
133
|
"proxy": {
|
|
108
134
|
"host": null,
|
|
109
135
|
"username": null,
|
package/config/plugin-ldap.json
CHANGED
|
@@ -93,6 +93,30 @@
|
|
|
93
93
|
"enabled": false,
|
|
94
94
|
"shutdownTimeout": 15000,
|
|
95
95
|
"forceExitTimeout": 1000
|
|
96
|
+
},
|
|
97
|
+
"stream": {
|
|
98
|
+
"baseUrls": [],
|
|
99
|
+
"certificate": {
|
|
100
|
+
"ca": null
|
|
101
|
+
},
|
|
102
|
+
"subscriber": {
|
|
103
|
+
"enabled": false,
|
|
104
|
+
"entity": {
|
|
105
|
+
"undefined": {
|
|
106
|
+
"nats": {
|
|
107
|
+
"tenant": null,
|
|
108
|
+
"subject": null,
|
|
109
|
+
"jwt": null,
|
|
110
|
+
"secret": null
|
|
111
|
+
},
|
|
112
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
113
|
+
"convertRolesToGroups": false,
|
|
114
|
+
"generateUserPassword": false,
|
|
115
|
+
"modifyOnly": false,
|
|
116
|
+
"replaceDomains": []
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
}
|
|
97
121
|
},
|
|
98
122
|
"endpoint": {
|
package/config/plugin-loki.json
CHANGED
|
@@ -93,6 +93,30 @@
|
|
|
93
93
|
"enabled": false,
|
|
94
94
|
"shutdownTimeout": 15000,
|
|
95
95
|
"forceExitTimeout": 1000
|
|
96
|
+
},
|
|
97
|
+
"stream": {
|
|
98
|
+
"baseUrls": [],
|
|
99
|
+
"certificate": {
|
|
100
|
+
"ca": null
|
|
101
|
+
},
|
|
102
|
+
"subscriber": {
|
|
103
|
+
"enabled": false,
|
|
104
|
+
"entity": {
|
|
105
|
+
"undefined": {
|
|
106
|
+
"nats": {
|
|
107
|
+
"tenant": null,
|
|
108
|
+
"subject": null,
|
|
109
|
+
"jwt": null,
|
|
110
|
+
"secret": null
|
|
111
|
+
},
|
|
112
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
113
|
+
"convertRolesToGroups": false,
|
|
114
|
+
"generateUserPassword": false,
|
|
115
|
+
"modifyOnly": false,
|
|
116
|
+
"replaceDomains": []
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
}
|
|
97
121
|
},
|
|
98
122
|
"endpoint": {
|
|
@@ -99,6 +99,30 @@
|
|
|
99
99
|
"enabled": false,
|
|
100
100
|
"shutdownTimeout": 15000,
|
|
101
101
|
"forceExitTimeout": 1000
|
|
102
|
+
},
|
|
103
|
+
"stream": {
|
|
104
|
+
"baseUrls": [],
|
|
105
|
+
"certificate": {
|
|
106
|
+
"ca": null
|
|
107
|
+
},
|
|
108
|
+
"subscriber": {
|
|
109
|
+
"enabled": false,
|
|
110
|
+
"entity": {
|
|
111
|
+
"undefined": {
|
|
112
|
+
"nats": {
|
|
113
|
+
"tenant": null,
|
|
114
|
+
"subject": null,
|
|
115
|
+
"jwt": null,
|
|
116
|
+
"secret": null
|
|
117
|
+
},
|
|
118
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
119
|
+
"convertRolesToGroups": false,
|
|
120
|
+
"generateUserPassword": false,
|
|
121
|
+
"modifyOnly": false,
|
|
122
|
+
"replaceDomains": []
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
102
126
|
}
|
|
103
127
|
},
|
|
104
128
|
"endpoint": {
|
package/config/plugin-mssql.json
CHANGED
|
@@ -93,6 +93,30 @@
|
|
|
93
93
|
"enabled": false,
|
|
94
94
|
"shutdownTimeout": 15000,
|
|
95
95
|
"forceExitTimeout": 1000
|
|
96
|
+
},
|
|
97
|
+
"stream": {
|
|
98
|
+
"baseUrls": [],
|
|
99
|
+
"certificate": {
|
|
100
|
+
"ca": null
|
|
101
|
+
},
|
|
102
|
+
"subscriber": {
|
|
103
|
+
"enabled": false,
|
|
104
|
+
"entity": {
|
|
105
|
+
"undefined": {
|
|
106
|
+
"nats": {
|
|
107
|
+
"tenant": null,
|
|
108
|
+
"subject": null,
|
|
109
|
+
"jwt": null,
|
|
110
|
+
"secret": null
|
|
111
|
+
},
|
|
112
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
113
|
+
"convertRolesToGroups": false,
|
|
114
|
+
"generateUserPassword": false,
|
|
115
|
+
"modifyOnly": false,
|
|
116
|
+
"replaceDomains": []
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
}
|
|
97
121
|
},
|
|
98
122
|
"endpoint": {
|
|
@@ -93,6 +93,30 @@
|
|
|
93
93
|
"enabled": false,
|
|
94
94
|
"shutdownTimeout": 15000,
|
|
95
95
|
"forceExitTimeout": 1000
|
|
96
|
+
},
|
|
97
|
+
"stream": {
|
|
98
|
+
"baseUrls": [],
|
|
99
|
+
"certificate": {
|
|
100
|
+
"ca": null
|
|
101
|
+
},
|
|
102
|
+
"subscriber": {
|
|
103
|
+
"enabled": false,
|
|
104
|
+
"entity": {
|
|
105
|
+
"undefined": {
|
|
106
|
+
"nats": {
|
|
107
|
+
"tenant": null,
|
|
108
|
+
"subject": null,
|
|
109
|
+
"jwt": null,
|
|
110
|
+
"secret": null
|
|
111
|
+
},
|
|
112
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
113
|
+
"convertRolesToGroups": false,
|
|
114
|
+
"generateUserPassword": false,
|
|
115
|
+
"modifyOnly": false,
|
|
116
|
+
"replaceDomains": []
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
}
|
|
97
121
|
},
|
|
98
122
|
"endpoint": {
|
package/config/plugin-scim.json
CHANGED
|
@@ -93,6 +93,30 @@
|
|
|
93
93
|
"enabled": false,
|
|
94
94
|
"shutdownTimeout": 15000,
|
|
95
95
|
"forceExitTimeout": 1000
|
|
96
|
+
},
|
|
97
|
+
"stream": {
|
|
98
|
+
"baseUrls": [],
|
|
99
|
+
"certificate": {
|
|
100
|
+
"ca": null
|
|
101
|
+
},
|
|
102
|
+
"subscriber": {
|
|
103
|
+
"enabled": false,
|
|
104
|
+
"entity": {
|
|
105
|
+
"undefined": {
|
|
106
|
+
"nats": {
|
|
107
|
+
"tenant": null,
|
|
108
|
+
"subject": null,
|
|
109
|
+
"jwt": null,
|
|
110
|
+
"secret": null
|
|
111
|
+
},
|
|
112
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
113
|
+
"convertRolesToGroups": false,
|
|
114
|
+
"generateUserPassword": false,
|
|
115
|
+
"modifyOnly": false,
|
|
116
|
+
"replaceDomains": []
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
}
|
|
97
121
|
},
|
|
98
122
|
"endpoint": {
|
|
@@ -102,6 +126,8 @@
|
|
|
102
126
|
"http://localhost:8880"
|
|
103
127
|
],
|
|
104
128
|
"scimVersion": "2.0",
|
|
129
|
+
"oauth": null,
|
|
130
|
+
"bearerAuth": null,
|
|
105
131
|
"basicAuth": {
|
|
106
132
|
"username": "gwadmin",
|
|
107
133
|
"password": "password"
|
|
@@ -117,6 +143,8 @@
|
|
|
117
143
|
"http://localhost:8880"
|
|
118
144
|
],
|
|
119
145
|
"scimVersion": "2.0",
|
|
146
|
+
"oauth": null,
|
|
147
|
+
"bearerAuth": null,
|
|
120
148
|
"basicAuth": {
|
|
121
149
|
"username": "gwadmin",
|
|
122
150
|
"password": "password"
|
package/config/plugin-soap.json
CHANGED
|
@@ -93,6 +93,30 @@
|
|
|
93
93
|
"enabled": false,
|
|
94
94
|
"shutdownTimeout": 15000,
|
|
95
95
|
"forceExitTimeout": 1000
|
|
96
|
+
},
|
|
97
|
+
"stream": {
|
|
98
|
+
"baseUrls": [],
|
|
99
|
+
"certificate": {
|
|
100
|
+
"ca": null
|
|
101
|
+
},
|
|
102
|
+
"subscriber": {
|
|
103
|
+
"enabled": false,
|
|
104
|
+
"entity": {
|
|
105
|
+
"undefined": {
|
|
106
|
+
"nats": {
|
|
107
|
+
"tenant": null,
|
|
108
|
+
"subject": null,
|
|
109
|
+
"jwt": null,
|
|
110
|
+
"secret": null
|
|
111
|
+
},
|
|
112
|
+
"deleteUserOnLastGroupRoleRemoval": false,
|
|
113
|
+
"convertRolesToGroups": false,
|
|
114
|
+
"generateUserPassword": false,
|
|
115
|
+
"modifyOnly": false,
|
|
116
|
+
"replaceDomains": []
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
96
120
|
}
|
|
97
121
|
},
|
|
98
122
|
"endpoint": {
|
package/index.js
CHANGED
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
const loki = require('./lib/plugin-loki')
|
|
13
13
|
// const mongodb = require('./lib/plugin-mongodb')
|
|
14
14
|
// const scim = require('./lib/plugin-scim')
|
|
15
|
-
// const soap = require('./lib/plugin-soap')
|
|
15
|
+
// const soap = require('./lib/plugin-soap') // prereq: npm install soap
|
|
16
16
|
// const mssql = require('./lib/plugin-mssql')
|
|
17
|
-
// const saphana = require('./lib/plugin-saphana')
|
|
17
|
+
// const saphana = require('./lib/plugin-saphana') // prereq: npm install hdb
|
|
18
18
|
// const entra = require('./lib/plugin-entra-id')
|
|
19
19
|
// const ldap = require('./lib/plugin-ldap')
|
|
20
20
|
// const api = require('./lib/plugin-api')
|