diff --git a/test/assets/mock-saml-metadata5.xml b/test/assets/mock-saml-metadata5.xml
new file mode 100644
index 00000000..c2ac7ff1
--- /dev/null
+++ b/test/assets/mock-saml-metadata5.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ MIIC4jCCAcoCCQC33wnybT5QZDANBgkqhkiG9w0BAQsFADAyMQswCQYDVQQGEwJV
+ SzEPMA0GA1UECgwGQm94eUhRMRIwEAYDVQQDDAlNb2NrIFNBTUwwIBcNMjIwMjI4
+ MjE0NjM4WhgPMzAyMTA3MDEyMTQ2MzhaMDIxCzAJBgNVBAYTAlVLMQ8wDQYDVQQK
+ DAZCb3h5SFExEjAQBgNVBAMMCU1vY2sgU0FNTDCCASIwDQYJKoZIhvcNAQEBBQAD
+ ggEPADCCAQoCggEBALGfYettMsct1T6tVUwTudNJH5Pnb9GGnkXi9Zw/e6x45DD0
+ RuRONbFlJ2T4RjAE/uG+AjXxXQ8o2SZfb9+GgmCHuTJFNgHoZ1nFVXCmb/Hg8Hpd
+ 4vOAGXndixaReOiq3EH5XvpMjMkJ3+8+9VYMzMZOjkgQtAqO36eAFFfNKX7dTj3V
+ pwLkvz6/KFCq8OAwY+AUi4eZm5J57D31GzjHwfjH9WTeX0MyndmnNB1qV75qQR3b
+ 2/W5sGHRv+9AarggJkF+ptUkXoLtVA51wcfYm6hILptpde5FQC8RWY1YrswBWAEZ
+ NfyrR4JeSweElNHg4NVOs4TwGjOPwWGqzTfgTlECAwEAATANBgkqhkiG9w0BAQsF
+ AAOCAQEAAYRlYflSXAWoZpFfwNiCQVE5d9zZ0DPzNdWhAybXcTyMf0z5mDf6FWBW
+ 5Gyoi9u3EMEDnzLcJNkwJAAc39Apa4I2/tml+Jy29dk8bTyX6m93ngmCgdLh5Za4
+ khuU3AM3L63g7VexCuO7kwkjh/+LqdcIXsVGO6XDfu2QOs1Xpe9zIzLpwm/RNYeX
+ UjbSj5ce/jekpAw7qyVVL4xOyh8AtUW1ek3wIw1MJvEgEPt0d16oshWJpoS1OT8L
+ r/22SvYEo3EmSGdTVGgk3x3s+A0qWAqTcyjr7Q4s/GKYRFfomGwz0TZ4Iw1ZN99M
+ m0eo2USlSRTVl7QHRTuiuSThHpLKQQ==
+
+
+
+ urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
+
+
+
+
\ No newline at end of file
diff --git a/test/assets/mock-saml-metadata6.xml b/test/assets/mock-saml-metadata6.xml
new file mode 100644
index 00000000..0d6b62cb
--- /dev/null
+++ b/test/assets/mock-saml-metadata6.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+ urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
+
+
+
+
\ No newline at end of file
diff --git a/test/lib/metadata.spec.ts b/test/lib/metadata.spec.ts
index 5b7f9681..616ae57c 100644
--- a/test/lib/metadata.spec.ts
+++ b/test/lib/metadata.spec.ts
@@ -7,6 +7,8 @@ const samlMetadata1 = fs.readFileSync('./test/assets/mock-saml-metadata1.xml').t
const samlMetadata2 = fs.readFileSync('./test/assets/mock-saml-metadata2.xml').toString();
const samlMetadata3 = fs.readFileSync('./test/assets/mock-saml-metadata3.xml').toString();
const samlMetadata4 = fs.readFileSync('./test/assets/mock-saml-metadata4.xml').toString();
+const samlMetadata5 = fs.readFileSync('./test/assets/mock-saml-metadata5.xml').toString();
+const samlMetadata6 = fs.readFileSync('./test/assets/mock-saml-metadata6.xml').toString();
describe('metadata.ts', function () {
it('saml MetaData ok without BEGIN & END notations', async function () {
@@ -106,4 +108,34 @@ describe('metadata.ts', function () {
expect(error).to.be.ok;
}
});
+
+ it(`metadata with missing KeyDescriptor attribute 'use=signing'`, async function () {
+ const value = await parseMetadata(samlMetadata5, {});
+ expect(value.thumbprint).to.equal(`d797f3829882233d3f01e49643f6a1195f242c94`);
+ expect(value.publicKey).to.equal(`MIIC4jCCAcoCCQC33wnybT5QZDANBgkqhkiG9w0BAQsFADAyMQswCQYDVQQGEwJV
+ SzEPMA0GA1UECgwGQm94eUhRMRIwEAYDVQQDDAlNb2NrIFNBTUwwIBcNMjIwMjI4
+ MjE0NjM4WhgPMzAyMTA3MDEyMTQ2MzhaMDIxCzAJBgNVBAYTAlVLMQ8wDQYDVQQK
+ DAZCb3h5SFExEjAQBgNVBAMMCU1vY2sgU0FNTDCCASIwDQYJKoZIhvcNAQEBBQAD
+ ggEPADCCAQoCggEBALGfYettMsct1T6tVUwTudNJH5Pnb9GGnkXi9Zw/e6x45DD0
+ RuRONbFlJ2T4RjAE/uG+AjXxXQ8o2SZfb9+GgmCHuTJFNgHoZ1nFVXCmb/Hg8Hpd
+ 4vOAGXndixaReOiq3EH5XvpMjMkJ3+8+9VYMzMZOjkgQtAqO36eAFFfNKX7dTj3V
+ pwLkvz6/KFCq8OAwY+AUi4eZm5J57D31GzjHwfjH9WTeX0MyndmnNB1qV75qQR3b
+ 2/W5sGHRv+9AarggJkF+ptUkXoLtVA51wcfYm6hILptpde5FQC8RWY1YrswBWAEZ
+ NfyrR4JeSweElNHg4NVOs4TwGjOPwWGqzTfgTlECAwEAATANBgkqhkiG9w0BAQsF
+ AAOCAQEAAYRlYflSXAWoZpFfwNiCQVE5d9zZ0DPzNdWhAybXcTyMf0z5mDf6FWBW
+ 5Gyoi9u3EMEDnzLcJNkwJAAc39Apa4I2/tml+Jy29dk8bTyX6m93ngmCgdLh5Za4
+ khuU3AM3L63g7VexCuO7kwkjh/+LqdcIXsVGO6XDfu2QOs1Xpe9zIzLpwm/RNYeX
+ UjbSj5ce/jekpAw7qyVVL4xOyh8AtUW1ek3wIw1MJvEgEPt0d16oshWJpoS1OT8L
+ r/22SvYEo3EmSGdTVGgk3x3s+A0qWAqTcyjr7Q4s/GKYRFfomGwz0TZ4Iw1ZN99M
+ m0eo2USlSRTVl7QHRTuiuSThHpLKQQ==`);
+ });
+
+ it(`metadata with missing KeyDescriptor should throw an error`, async () => {
+ try {
+ await parseMetadata(samlMetadata6, {});
+ } catch (error) {
+ const result = (error as Error).message;
+ expect(result).to.be.equal('Could not find X509Certificate in the IdP metadata.');
+ }
+ });
});