samlify 2.12.0 → 2.13.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 +1 -1
- package/build/src/api.js +41 -3
- package/build/src/api.js.map +1 -1
- package/build/src/binding-post.js +236 -182
- package/build/src/binding-post.js.map +1 -1
- package/build/src/binding-redirect.js +303 -215
- package/build/src/binding-redirect.js.map +1 -1
- package/build/src/binding-simplesign.js +285 -137
- package/build/src/binding-simplesign.js.map +1 -1
- package/build/src/entity-idp.js +130 -47
- package/build/src/entity-idp.js.map +1 -1
- package/build/src/entity-sp.js +81 -39
- package/build/src/entity-sp.js.map +1 -1
- package/build/src/entity.js +100 -62
- package/build/src/entity.js.map +1 -1
- package/build/src/extractor.js +118 -151
- package/build/src/extractor.js.map +1 -1
- package/build/src/flow.js +100 -96
- package/build/src/flow.js.map +1 -1
- package/build/src/libsaml.js +315 -259
- package/build/src/libsaml.js.map +1 -1
- package/build/src/metadata-idp.js +60 -30
- package/build/src/metadata-idp.js.map +1 -1
- package/build/src/metadata-sp.js +51 -41
- package/build/src/metadata-sp.js.map +1 -1
- package/build/src/metadata.js +47 -43
- package/build/src/metadata.js.map +1 -1
- package/build/src/options.js +73 -0
- package/build/src/options.js.map +1 -0
- package/build/src/urn.js +28 -1
- package/build/src/urn.js.map +1 -1
- package/build/src/utility.js +140 -85
- package/build/src/utility.js.map +1 -1
- package/build/src/validator.js +27 -10
- package/build/src/validator.js.map +1 -1
- package/package.json +16 -5
- package/types/src/api.d.ts +33 -3
- package/types/src/binding-post.d.ts +67 -34
- package/types/src/binding-redirect.d.ts +58 -31
- package/types/src/binding-simplesign.d.ts +77 -21
- package/types/src/entity-idp.d.ts +40 -31
- package/types/src/entity-sp.d.ts +37 -27
- package/types/src/entity.d.ts +71 -77
- package/types/src/extractor.d.ts +31 -22
- package/types/src/flow.d.ts +24 -2
- package/types/src/libsaml.d.ts +172 -118
- package/types/src/metadata-idp.d.ts +27 -11
- package/types/src/metadata-sp.d.ts +29 -19
- package/types/src/metadata.d.ts +59 -34
- package/types/src/options.d.ts +37 -0
- package/types/src/types.d.ts +250 -24
- package/types/src/urn.d.ts +7 -0
- package/types/src/utility.d.ts +139 -90
- package/types/src/validator.d.ts +21 -0
- package/.circleci/config.yml +0 -98
- package/.editorconfig +0 -19
- package/.github/FUNDING.yml +0 -1
- package/.github/workflows/deploy-docs.yml +0 -56
- package/.pre-commit.sh +0 -15
- package/.snyk +0 -4
- package/Makefile +0 -25
- package/index.ts +0 -28
- package/samlify-2.11.0.tgz +0 -0
- package/src/api.ts +0 -48
- package/src/binding-post.ts +0 -336
- package/src/binding-redirect.ts +0 -335
- package/src/binding-simplesign.ts +0 -231
- package/src/entity-idp.ts +0 -145
- package/src/entity-sp.ts +0 -114
- package/src/entity.ts +0 -243
- package/src/extractor.ts +0 -399
- package/src/flow.ts +0 -469
- package/src/libsaml.ts +0 -779
- package/src/metadata-idp.ts +0 -146
- package/src/metadata-sp.ts +0 -203
- package/src/metadata.ts +0 -166
- package/src/types.ts +0 -127
- package/src/urn.ts +0 -210
- package/src/utility.ts +0 -259
- package/src/validator.ts +0 -44
- package/tsconfig.json +0 -41
- package/tslint.json +0 -35
- package/types.d.ts +0 -2
- package/vitest.config.ts +0 -12
package/build/src/entity.js
CHANGED
|
@@ -15,10 +15,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
/**
|
|
18
|
-
* @file entity.ts
|
|
19
|
-
* @author tngan
|
|
20
|
-
* @desc
|
|
21
|
-
|
|
18
|
+
* @file entity.ts
|
|
19
|
+
* @author tngan
|
|
20
|
+
* @desc Shared base class for identity-provider and service-provider
|
|
21
|
+
* entities. Owns configuration merging, metadata delegation, and the
|
|
22
|
+
* high-level parse/create helpers used by both sides.
|
|
23
|
+
*/
|
|
22
24
|
var crypto_1 = require("crypto");
|
|
23
25
|
var utility_1 = require("./utility");
|
|
24
26
|
var urn_1 = require("./urn");
|
|
@@ -26,6 +28,8 @@ var metadata_idp_1 = __importDefault(require("./metadata-idp"));
|
|
|
26
28
|
var metadata_sp_1 = __importDefault(require("./metadata-sp"));
|
|
27
29
|
var binding_redirect_1 = __importDefault(require("./binding-redirect"));
|
|
28
30
|
var binding_post_1 = __importDefault(require("./binding-post"));
|
|
31
|
+
var binding_simplesign_1 = __importDefault(require("./binding-simplesign"));
|
|
32
|
+
var options_1 = require("./options");
|
|
29
33
|
var flow_1 = require("./flow");
|
|
30
34
|
var dataEncryptionAlgorithm = urn_1.algorithms.encryption.data;
|
|
31
35
|
var keyEncryptionAlgorithm = urn_1.algorithms.encryption.key;
|
|
@@ -40,27 +44,31 @@ var defaultEntitySetting = {
|
|
|
40
44
|
requestSignatureAlgorithm: signatureAlgorithms.RSA_SHA256,
|
|
41
45
|
dataEncryptionAlgorithm: dataEncryptionAlgorithm.AES_256,
|
|
42
46
|
keyEncryptionAlgorithm: keyEncryptionAlgorithm.RSA_OAEP_MGF1P,
|
|
43
|
-
generateID: function () { return
|
|
47
|
+
generateID: function () { return '_' + (0, crypto_1.randomUUID)(); },
|
|
44
48
|
relayState: '',
|
|
45
49
|
};
|
|
46
50
|
var Entity = /** @class */ (function () {
|
|
47
51
|
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
52
|
+
* Build an entity, merging the provided configuration with defaults and
|
|
53
|
+
* hydrating the metadata abstraction for its role.
|
|
54
|
+
*
|
|
55
|
+
* @param entitySetting IdP or SP settings (metadata XML or options)
|
|
56
|
+
* @param entityType `idp` or `sp`
|
|
57
|
+
*/
|
|
51
58
|
function Entity(entitySetting, entityType) {
|
|
52
59
|
this.entitySetting = Object.assign({}, defaultEntitySetting, entitySetting);
|
|
60
|
+
this.entityType = entityType;
|
|
53
61
|
var metadata = entitySetting.metadata || entitySetting;
|
|
54
62
|
switch (entityType) {
|
|
55
63
|
case 'idp':
|
|
56
64
|
this.entityMeta = (0, metadata_idp_1.default)(metadata);
|
|
57
|
-
//
|
|
65
|
+
// Metadata takes precedence over settings when both supply the same key.
|
|
58
66
|
this.entitySetting.wantAuthnRequestsSigned = this.entityMeta.isWantAuthnRequestsSigned();
|
|
59
67
|
this.entitySetting.nameIDFormat = this.entityMeta.getNameIDFormat() || this.entitySetting.nameIDFormat;
|
|
60
68
|
break;
|
|
61
69
|
case 'sp':
|
|
62
70
|
this.entityMeta = (0, metadata_sp_1.default)(metadata);
|
|
63
|
-
//
|
|
71
|
+
// Metadata takes precedence over settings when both supply the same key.
|
|
64
72
|
this.entitySetting.authnRequestsSigned = this.entityMeta.isAuthnRequestSigned();
|
|
65
73
|
this.entitySetting.wantAssertionsSigned = this.entityMeta.isWantAssertionsSigned();
|
|
66
74
|
this.entitySetting.nameIDFormat = this.entityMeta.getNameIDFormat() || this.entitySetting.nameIDFormat;
|
|
@@ -70,31 +78,34 @@ var Entity = /** @class */ (function () {
|
|
|
70
78
|
}
|
|
71
79
|
}
|
|
72
80
|
/**
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
*/
|
|
81
|
+
* Return the effective entity settings (defaults merged with overrides).
|
|
82
|
+
*/
|
|
76
83
|
Entity.prototype.getEntitySetting = function () {
|
|
77
84
|
return this.entitySetting;
|
|
78
85
|
};
|
|
79
86
|
/**
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
*/
|
|
87
|
+
* Return the serialized metadata XML for this entity.
|
|
88
|
+
*/
|
|
83
89
|
Entity.prototype.getMetadata = function () {
|
|
84
90
|
return this.entityMeta.getMetadata();
|
|
85
91
|
};
|
|
86
92
|
/**
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
93
|
+
* Persist the metadata XML to disk.
|
|
94
|
+
*
|
|
95
|
+
* @param exportFile absolute file path
|
|
96
|
+
*/
|
|
90
97
|
Entity.prototype.exportMetadata = function (exportFile) {
|
|
91
98
|
return this.entityMeta.exportMetadata(exportFile);
|
|
92
99
|
};
|
|
93
|
-
/**
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Equality check between a field value extracted from a SAML message and
|
|
102
|
+
* the value declared in the peer's metadata. Arrays must match on every
|
|
103
|
+
* entry.
|
|
104
|
+
*
|
|
105
|
+
* @param field value(s) from the inbound SAML message
|
|
106
|
+
* @param metaField value from peer metadata
|
|
107
|
+
* @returns true when every provided value equals `metaField`
|
|
108
|
+
*/
|
|
98
109
|
Entity.prototype.verifyFields = function (field, metaField) {
|
|
99
110
|
if ((0, utility_1.isString)(field)) {
|
|
100
111
|
return field === metaField;
|
|
@@ -104,22 +115,33 @@ var Entity = /** @class */ (function () {
|
|
|
104
115
|
field.forEach(function (f) {
|
|
105
116
|
if (f !== metaField) {
|
|
106
117
|
res_1 = false;
|
|
107
|
-
return;
|
|
108
118
|
}
|
|
109
119
|
});
|
|
110
120
|
return res_1;
|
|
111
121
|
}
|
|
112
122
|
return false;
|
|
113
123
|
};
|
|
114
|
-
/**
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
124
|
+
/**
|
|
125
|
+
* Build a logout request targeting `targetEntity`. The return type depends
|
|
126
|
+
* on the binding: `redirect` produces a URL; `post` and `simpleSign`
|
|
127
|
+
* produce a base64 envelope (the latter with a detached signature).
|
|
128
|
+
*
|
|
129
|
+
* The fourth parameter accepts either a string (legacy `relayState`
|
|
130
|
+
* positional shape) or an options bag `{ relayState?, customTagReplacement? }`.
|
|
131
|
+
* Per `saml-bindings §3.4.3 / §3.5.3`, RelayState is request-scoped — pass
|
|
132
|
+
* it via the options bag instead of `entitySetting.relayState`.
|
|
133
|
+
*
|
|
134
|
+
* @param targetEntity peer to receive the logout request
|
|
135
|
+
* @param binding `redirect`, `post`, or `simpleSign`
|
|
136
|
+
* @param user currently authenticated user
|
|
137
|
+
* @param optionsOrRelayState per-request options or legacy RelayState string
|
|
138
|
+
* @param legacyCustomTagReplacement optional custom template transformer (legacy positional form)
|
|
139
|
+
*/
|
|
140
|
+
Entity.prototype.createLogoutRequest = function (targetEntity, binding, user, optionsOrRelayState, legacyCustomTagReplacement) {
|
|
141
|
+
var _a, _b;
|
|
142
|
+
var opts = (0, options_1.normalizeCreateLogoutRequestOptions)(optionsOrRelayState, legacyCustomTagReplacement);
|
|
143
|
+
var relayState = (_b = (_a = opts.relayState) !== null && _a !== void 0 ? _a : this.entitySetting.relayState) !== null && _b !== void 0 ? _b : '';
|
|
144
|
+
var customTagReplacement = opts.customTagReplacement;
|
|
123
145
|
if (binding === urn_1.wording.binding.redirect) {
|
|
124
146
|
return binding_redirect_1.default.logoutRequestRedirectURL(user, {
|
|
125
147
|
init: this,
|
|
@@ -131,19 +153,33 @@ var Entity = /** @class */ (function () {
|
|
|
131
153
|
var context = binding_post_1.default.base64LogoutRequest(user, "/*[local-name(.)='LogoutRequest']", { init: this, target: targetEntity }, customTagReplacement);
|
|
132
154
|
return __assign(__assign({}, context), { relayState: relayState, entityEndpoint: entityEndpoint, type: 'SAMLRequest' });
|
|
133
155
|
}
|
|
134
|
-
|
|
156
|
+
if (binding === urn_1.wording.binding.simpleSign) {
|
|
157
|
+
var entityEndpoint = targetEntity.entityMeta.getSingleLogoutService(binding);
|
|
158
|
+
var context = binding_simplesign_1.default.base64LogoutRequest(user, { init: this, target: targetEntity }, relayState, customTagReplacement);
|
|
159
|
+
return __assign(__assign({}, context), { relayState: relayState, entityEndpoint: entityEndpoint, type: 'SAMLRequest' });
|
|
160
|
+
}
|
|
161
|
+
// Artifact binding is not yet implemented.
|
|
135
162
|
throw new Error('ERR_UNDEFINED_BINDING');
|
|
136
163
|
};
|
|
137
164
|
/**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
165
|
+
* Build a logout response to the peer that initiated logout.
|
|
166
|
+
*
|
|
167
|
+
* The fourth parameter accepts either a string (legacy `relayState`
|
|
168
|
+
* positional shape) or an options bag `{ relayState?, customTagReplacement? }`.
|
|
169
|
+
* Per `saml-bindings §3.4.3 / §3.5.3`, RelayState is request-scoped — pass
|
|
170
|
+
* it via the options bag instead of `entitySetting.relayState`.
|
|
171
|
+
*
|
|
172
|
+
* @param target peer that sent the corresponding logout request
|
|
173
|
+
* @param requestInfo parsed request used to link `InResponseTo`
|
|
174
|
+
* @param binding `redirect`, `post`, or `simpleSign`
|
|
175
|
+
* @param optionsOrRelayState per-request options or legacy RelayState string
|
|
176
|
+
* @param legacyCustomTagReplacement optional custom template transformer (legacy positional form)
|
|
177
|
+
*/
|
|
178
|
+
Entity.prototype.createLogoutResponse = function (target, requestInfo, binding, optionsOrRelayState, legacyCustomTagReplacement) {
|
|
179
|
+
var _a, _b;
|
|
180
|
+
var opts = (0, options_1.normalizeCreateLogoutResponseOptions)(optionsOrRelayState, legacyCustomTagReplacement);
|
|
181
|
+
var relayState = (_b = (_a = opts.relayState) !== null && _a !== void 0 ? _a : this.entitySetting.relayState) !== null && _b !== void 0 ? _b : '';
|
|
182
|
+
var customTagReplacement = opts.customTagReplacement;
|
|
147
183
|
var protocol = urn_1.namespace.binding[binding];
|
|
148
184
|
if (protocol === urn_1.namespace.binding.redirect) {
|
|
149
185
|
return binding_redirect_1.default.logoutResponseRedirectURL(requestInfo, {
|
|
@@ -158,20 +194,23 @@ var Entity = /** @class */ (function () {
|
|
|
158
194
|
}, customTagReplacement);
|
|
159
195
|
return __assign(__assign({}, context), { relayState: relayState, entityEndpoint: target.entityMeta.getSingleLogoutService(binding), type: 'SAMLResponse' });
|
|
160
196
|
}
|
|
197
|
+
if (protocol === urn_1.namespace.binding.simpleSign) {
|
|
198
|
+
var context = binding_simplesign_1.default.base64LogoutResponse(requestInfo, { init: this, target: target }, relayState, customTagReplacement);
|
|
199
|
+
return __assign(__assign({}, context), { relayState: relayState, entityEndpoint: target.entityMeta.getSingleLogoutService(binding), type: 'SAMLResponse' });
|
|
200
|
+
}
|
|
161
201
|
throw new Error('ERR_CREATE_LOGOUT_RESPONSE_UNDEFINED_BINDING');
|
|
162
202
|
};
|
|
163
203
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
204
|
+
* Parse, validate and verify an inbound logout request.
|
|
205
|
+
*
|
|
206
|
+
* @param from peer entity that produced the request
|
|
207
|
+
* @param binding `redirect`, `post`, or `simpleSign`
|
|
208
|
+
* @param request HTTP request envelope
|
|
209
|
+
*/
|
|
170
210
|
Entity.prototype.parseLogoutRequest = function (from, binding, request) {
|
|
171
|
-
var self = this;
|
|
172
211
|
return (0, flow_1.flow)({
|
|
173
212
|
from: from,
|
|
174
|
-
self:
|
|
213
|
+
self: this,
|
|
175
214
|
type: 'logout',
|
|
176
215
|
parserType: 'LogoutRequest',
|
|
177
216
|
checkSignature: this.entitySetting.wantLogoutRequestSigned,
|
|
@@ -180,22 +219,21 @@ var Entity = /** @class */ (function () {
|
|
|
180
219
|
});
|
|
181
220
|
};
|
|
182
221
|
/**
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
222
|
+
* Parse, validate and verify an inbound logout response.
|
|
223
|
+
*
|
|
224
|
+
* @param from peer entity that produced the response
|
|
225
|
+
* @param binding `redirect`, `post`, or `simpleSign`
|
|
226
|
+
* @param request HTTP request envelope
|
|
227
|
+
*/
|
|
189
228
|
Entity.prototype.parseLogoutResponse = function (from, binding, request) {
|
|
190
|
-
var self = this;
|
|
191
229
|
return (0, flow_1.flow)({
|
|
192
230
|
from: from,
|
|
193
|
-
self:
|
|
231
|
+
self: this,
|
|
194
232
|
type: 'logout',
|
|
195
233
|
parserType: 'LogoutResponse',
|
|
196
|
-
checkSignature:
|
|
234
|
+
checkSignature: this.entitySetting.wantLogoutResponseSigned,
|
|
197
235
|
binding: binding,
|
|
198
|
-
request: request
|
|
236
|
+
request: request,
|
|
199
237
|
});
|
|
200
238
|
};
|
|
201
239
|
return Entity;
|
package/build/src/entity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/entity.ts"],"names":[],"mappings":"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"}
|