samlesa 2.15.0 → 2.15.3
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 -67
- package/build/src/flow.js +25 -25
- package/build/src/libsaml.js +0 -8
- package/build/src/utility.js +2 -1
- package/package.json +1 -1
- package/types/src/flow.d.ts.map +1 -1
- package/types/src/libsaml.d.ts.map +1 -1
- package/types/src/utility.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -61,70 +61,4 @@ Saml.setSchemaValidator(validator);
|
|
|
61
61
|
> openssl genrsa -passout pass:foobar -out encryptKey.pem 4096
|
|
62
62
|
> openssl req -new -x509 -key encryptKey.pem -out encryptionCert.cer -days 3650
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
```js
|
|
67
|
-
/** 本代码正对不同的绑定做出的方式伪代码*/
|
|
68
|
-
if (request.method === 'GET') {
|
|
69
|
-
data = request.query
|
|
70
|
-
bind = 'redirect'
|
|
71
|
-
infoQuery.query = request.query
|
|
72
|
-
let compressedResult = validateAndInflateSamlResponse(data.SAMLResponse)
|
|
73
|
-
console.log(compressedResult);
|
|
74
|
-
console.log("压缩结果---------------------")
|
|
75
|
-
infoQuery.octetString = buildOctetStringFromQuery(request.query)
|
|
76
|
-
dataResult = Extractor.extract(compressedResult.xml, loginResponseFields);
|
|
77
|
-
}
|
|
78
|
-
if (request.method === 'POST') {
|
|
79
|
-
data = request.body
|
|
80
|
-
bind = 'post'
|
|
81
|
-
infoQuery.body = request.body
|
|
82
|
-
dataResult = Extractor.extract(Base64.decode(decodeURIComponent(data.SAMLResponse)), loginResponseFields)
|
|
83
|
-
}
|
|
84
|
-
/** 您应该自行实施根据响应提取出来的Issur去数据库查找元数据*/
|
|
85
|
-
// 1. 提取SAML发行者信息
|
|
86
|
-
if (!dataResult.issuer) {
|
|
87
|
-
return reply.view('errorHtml.html', {
|
|
88
|
-
errorMessage: `无效的发行者`, errorCode: StatusCode?.Responder, requestId: ""
|
|
89
|
-
})
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
let result = await samlCollection.findOne({issuer:dataResult.issuer});
|
|
93
|
-
const idp = new Saml.IdentityProvider({
|
|
94
|
-
metadata: result.metadata,
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
/** 检查断言*/
|
|
98
|
-
let extract = null
|
|
99
|
-
/** 先看数据库有没有*/
|
|
100
|
-
let bindType = 'post' //redirect post ......您应该自定判断
|
|
101
|
-
let parseResult = await sp.parseLoginResponse(idp, bindType, infoQuery)
|
|
102
|
-
|
|
103
|
-
/**如果解析成功 你应该去验证元素结果中的 attribute 和 Audience issur是否是你期待的 inResponseTo检查 是否有必须的属性没有 都需要您进行严密的的考察 */
|
|
104
|
-
|
|
105
|
-
if(upaboveFieldCheckAllSuccess){
|
|
106
|
-
return repla.view('success.ejs',{...your template data})
|
|
107
|
-
}
|
|
108
|
-
/*success.ejs template example */
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
```html
|
|
113
|
-
<!-- 实例用于提交post 请求隐藏的表单 -->
|
|
114
|
-
<form id="saml-form" method="post" action="<%= entityEndpoint %>" style="display: none;">
|
|
115
|
-
<input type="hidden" name="<%= type %>" value="<%= context %>" />
|
|
116
|
-
<input type="hidden" name="RelayState" value="<%= relayState %>" />
|
|
117
|
-
</form>
|
|
118
|
-
|
|
119
|
-
<script>
|
|
120
|
-
// 延迟 1.5 秒提交以展示加载效果
|
|
121
|
-
|
|
122
|
-
document.getElementById('saml-form').submit();
|
|
123
|
-
|
|
124
|
-
// 兼容性处理:若 5 秒后仍未跳转显示提示
|
|
125
|
-
setTimeout(() => {
|
|
126
|
-
document.querySelector('.loading-subtext').textContent =
|
|
127
|
-
'跳转时间较长,请检查网络或联系系统管理员';
|
|
128
|
-
}, 1500);
|
|
129
|
-
</script>
|
|
130
|
-
```
|
|
64
|
+
#
|
package/build/src/flow.js
CHANGED
|
@@ -111,12 +111,14 @@ async function redirectFlow(options) {
|
|
|
111
111
|
&& !verifyTime(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
112
112
|
return Promise.reject('ERR_SUBJECT_UNCONFIRMED');
|
|
113
113
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
114
|
+
if (parserType === 'SAMLResponse') {
|
|
115
|
+
let destination = extractedProperties?.response?.destination;
|
|
116
|
+
let isExit = self.entitySetting?.assertionConsumerService?.filter((item) => {
|
|
117
|
+
return item?.Location === destination;
|
|
118
|
+
});
|
|
119
|
+
if (isExit?.length === 0) {
|
|
120
|
+
return Promise.reject('ERR_Destination_URL');
|
|
121
|
+
}
|
|
120
122
|
}
|
|
121
123
|
return Promise.resolve(parseResult);
|
|
122
124
|
}
|
|
@@ -136,15 +138,11 @@ async function postFlow(options) {
|
|
|
136
138
|
let extractorFields = [];
|
|
137
139
|
// validate the xml first
|
|
138
140
|
let res = await libsaml.isValidXml(samlContent);
|
|
139
|
-
console.log(res);
|
|
140
|
-
console.log("验证结果---------------");
|
|
141
141
|
if (parserType !== urlParams.samlResponse) {
|
|
142
142
|
extractorFields = getDefaultExtractorFields(parserType, null);
|
|
143
143
|
}
|
|
144
|
-
console.log(parserType);
|
|
145
144
|
// check status based on different scenarios
|
|
146
145
|
await checkStatus(samlContent, parserType);
|
|
147
|
-
console.log("========走不到这里来=============");
|
|
148
146
|
/**检查签名顺序 */
|
|
149
147
|
/* if (
|
|
150
148
|
checkSignature &&
|
|
@@ -162,10 +160,7 @@ async function postFlow(options) {
|
|
|
162
160
|
extractorFields = getDefaultExtractorFields(parserType, verifiedAssertionNode);
|
|
163
161
|
}
|
|
164
162
|
}*/
|
|
165
|
-
console.log("===============我走的这里=========================");
|
|
166
163
|
const [verified, verifiedAssertionNode, isDecryptRequired] = libsaml.verifySignature(samlContent, verificationOptions);
|
|
167
|
-
console.log(verified);
|
|
168
|
-
console.log("verified");
|
|
169
164
|
decryptRequired = isDecryptRequired;
|
|
170
165
|
if (!verified) {
|
|
171
166
|
return Promise.reject('ERR_FAIL_TO_VERIFY_ETS_SIGNATURE');
|
|
@@ -183,12 +178,6 @@ async function postFlow(options) {
|
|
|
183
178
|
checkSignature &&
|
|
184
179
|
from.entitySetting.messageSigningOrder === MessageSignatureOrder.STE
|
|
185
180
|
) {
|
|
186
|
-
console.log("走不到这里来========================================")
|
|
187
|
-
console.log("走不到这里来========================================")
|
|
188
|
-
console.log("走不到这里来========================================")
|
|
189
|
-
console.log("走不到这里来========================================")
|
|
190
|
-
console.log("走不到这里来========================================")
|
|
191
|
-
|
|
192
181
|
const [verified, verifiedAssertionNode,isDecryptRequired] = libsaml.verifySignature(samlContent, verificationOptions);
|
|
193
182
|
decryptRequired = isDecryptRequired
|
|
194
183
|
if (verified) {
|
|
@@ -238,6 +227,15 @@ async function postFlow(options) {
|
|
|
238
227
|
if (isExit?.length === 0) {
|
|
239
228
|
return Promise.reject('ERR_Destination_URL');
|
|
240
229
|
}
|
|
230
|
+
if (parserType === 'SAMLResponse') {
|
|
231
|
+
let destination = extractedProperties?.response?.destination;
|
|
232
|
+
let isExit = self.entitySetting?.assertionConsumerService?.filter((item) => {
|
|
233
|
+
return item?.Location === destination;
|
|
234
|
+
});
|
|
235
|
+
if (isExit?.length === 0) {
|
|
236
|
+
return Promise.reject('ERR_Destination_URL');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
241
239
|
return Promise.resolve(parseResult);
|
|
242
240
|
}
|
|
243
241
|
// proceed the post simple sign binding flow
|
|
@@ -323,12 +321,14 @@ async function postSimpleSignFlow(options) {
|
|
|
323
321
|
&& !verifyTime(extractedProperties.conditions.notBefore, extractedProperties.conditions.notOnOrAfter, self.entitySetting.clockDrifts)) {
|
|
324
322
|
return Promise.reject('ERR_SUBJECT_UNCONFIRMED');
|
|
325
323
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
324
|
+
if (parserType === 'SAMLResponse') {
|
|
325
|
+
let destination = extractedProperties?.response?.destination;
|
|
326
|
+
let isExit = self.entitySetting?.assertionConsumerService?.filter((item) => {
|
|
327
|
+
return item?.Location === destination;
|
|
328
|
+
});
|
|
329
|
+
if (isExit?.length === 0) {
|
|
330
|
+
return Promise.reject('ERR_Destination_URL');
|
|
331
|
+
}
|
|
332
332
|
}
|
|
333
333
|
return Promise.resolve(parseResult);
|
|
334
334
|
}
|
package/build/src/libsaml.js
CHANGED
|
@@ -132,12 +132,9 @@ const libSaml = () => {
|
|
|
132
132
|
}
|
|
133
133
|
catch (inflateError) {
|
|
134
134
|
// 4. 解压失败,尝试直接解析为未压缩的XML
|
|
135
|
-
console.log("错误了-------------------------");
|
|
136
135
|
try {
|
|
137
136
|
const base64Encoded = decodeURIComponent(urlEncodedResponse);
|
|
138
137
|
xml = Buffer.from(base64Encoded, 'base64').toString('utf-8');
|
|
139
|
-
console.log(xml);
|
|
140
|
-
console.log("真的还是假的------------------------------------l");
|
|
141
138
|
return { compressed: false, xml, error: null };
|
|
142
139
|
}
|
|
143
140
|
catch (xmlError) {
|
|
@@ -534,8 +531,6 @@ const libSaml = () => {
|
|
|
534
531
|
signer.write(octetString);
|
|
535
532
|
signer.end();
|
|
536
533
|
const signature = signer.sign(privateKey, 'base64');
|
|
537
|
-
console.log(signature.toString());
|
|
538
|
-
console.log('dayingyixia');
|
|
539
534
|
// 5. 处理编码输出
|
|
540
535
|
return isBase64 ? signature.toString() : signature;
|
|
541
536
|
}
|
|
@@ -549,8 +544,6 @@ const libSaml = () => {
|
|
|
549
544
|
const verifier = createVerify(signingScheme);
|
|
550
545
|
verifier.update(octetString);
|
|
551
546
|
const isValid = verifier.verify(utility.getPublicKeyPemFromCertificate(signCert), Buffer.isBuffer(signature) ? signature : Buffer.from(signature, 'base64'));
|
|
552
|
-
console.log(isValid);
|
|
553
|
-
console.log('-------------签名验证结果-------------');
|
|
554
547
|
return isValid;
|
|
555
548
|
},
|
|
556
549
|
/**
|
|
@@ -609,7 +602,6 @@ const libSaml = () => {
|
|
|
609
602
|
warnInsecureAlgorithm: true
|
|
610
603
|
}, (err, res) => {
|
|
611
604
|
if (err) {
|
|
612
|
-
console.error(err);
|
|
613
605
|
return reject(new Error('ERR_EXCEPTION_OF_ASSERTION_ENCRYPTION'));
|
|
614
606
|
}
|
|
615
607
|
if (!res) {
|
package/build/src/utility.js
CHANGED
|
@@ -98,7 +98,8 @@ export function base64Decode(base64Message, isBytes) {
|
|
|
98
98
|
*/
|
|
99
99
|
function deflateString(message) {
|
|
100
100
|
const input = Array.prototype.map.call(message, char => char.charCodeAt(0));
|
|
101
|
-
|
|
101
|
+
let unit8 = new Uint8Array(input);
|
|
102
|
+
return Array.from(deflate(unit8));
|
|
102
103
|
}
|
|
103
104
|
/**
|
|
104
105
|
* @desc Decompress the compressed string
|
package/package.json
CHANGED
package/types/src/flow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/flow.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAC,IAAI,CAAE;CACvB;
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../src/flow.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAC,IAAI,CAAE;CACvB;AAwdD,wBAAgB,IAAI,CAAC,OAAO,KAAA,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBjD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libsaml.d.ts","sourceRoot":"","sources":["../../src/libsaml.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"libsaml.d.ts","sourceRoot":"","sources":["../../src/libsaml.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,cAAc,UAAO,MAmB3E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAIvC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAEhC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,YAGnC;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,GAAG,KAAA,EAAE,IAAI,KAAA,EAAE,YAAY,KAAA,OAG1C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,mBAElC;AAED;;;;GAIG;AACH,iBAAS,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,UAE/C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAGtF;AAED;;;;GAIG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"utility.d.ts","sourceRoot":"","sources":["../../src/utility.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,cAAc,UAAO,MAmB3E;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,OAIvC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,OAEhC;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,YAGnC;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,GAAG,KAAA,EAAE,IAAI,KAAA,EAAE,YAAY,KAAA,OAG1C;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,mBAElC;AAED;;;;GAIG;AACH,iBAAS,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,UAE/C;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAGtF;AAED;;;;GAIG;AACH,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAIhD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAM9D;AAYD;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,UAEtD;AAED;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,UAErD;AAED;;;;GAIG;AACH,iBAAS,UAAU,CAAC,GAAG,KAAA,UAEtB;AAED;;;;GAIG;AACH,iBAAS,WAAW,CAAC,GAAG,KAAA,EAAE,YAAY,SAAK,OAE1C;AAED;;;;;GAKG;AACH,iBAAS,YAAY,CAAC,IAAI,KAAA,EAAE,IAAI,KAAA,OAE/B;AAED;;;;GAIG;AACH,iBAAS,8BAA8B,CAAC,qBAAqB,EAAE,MAAM,oCAWpE;AAqCD,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,UAAU,CAAC,EAAE,MAAM,EACnB,cAAc,GAAE,OAAc,GAC7B,MAAM,GAAG,MAAM,CA4BjB;AAGD;;GAEG;AACH,iBAAS,eAAe,CAAC,KAAK,KAAA,EAAE,cAAc,KAAA,OAE7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,WAErC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAGhD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,MAAM,CAElF;AAED,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;CAeZ,CAAC;AAEF,eAAe,OAAO,CAAC"}
|