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.'); + } + }); });