diff --git a/src/JwksClient.js b/src/JwksClient.js index f50fa7ff..7debe82d 100644 --- a/src/JwksClient.js +++ b/src/JwksClient.js @@ -66,7 +66,18 @@ export class JwksClient { } const signingKeys = keys - .filter(key => key.use === 'sig' && key.kty === 'RSA' && key.kid && ((key.x5c && key.x5c.length) || (key.n && key.e))) + .filter((key) => { + if(key.kty !== 'RSA'){ + return false; + } + if(!key.kid){ + return false; + } + if(key.hasOwnProperty('use') && key.use !== 'sig'){ + return false; + } + return ((key.x5c && key.x5c.length) || (key.n && key.e)); + }) .map(key => { if (key.x5c && key.x5c.length) { return { diff --git a/tests/jwksClient.tests.js b/tests/jwksClient.tests.js index bb685dd4..17557d0f 100644 --- a/tests/jwksClient.tests.js +++ b/tests/jwksClient.tests.js @@ -278,7 +278,24 @@ describe("JwksClient", () => { e: "AQAB", n: "s4W7xjkQZP3OwG7PfRgcYKn8eRYXHiz1iK503fS-K2FZo-Ublwwa2xFZWpsUU_jtoVCwIkaqZuo6xoKtlMYXXvfVHGuKBHEBVn8b8x_57BQWz1d0KdrNXxuMvtFe6RzMqiMqzqZrzae4UqVCkYqcR9gQx66Ehq7hPmCxJCkg7ajo7fu6E7dPd34KH2HSYRsaaEA_BcKTeb9H1XE_qEKjog68wUU9Ekfl3FBIRN-1Ah_BoktGFoXyi_jt0-L0-gKcL1BLmUlGzMusvRbjI_0-qj-mc0utGdRjY-xIN2yBj8vl4DODO-wMwfp-cqZbCd9TENyHaTb8iA27s-73L3ExOQ" - } + }, + { + kid: "IdTokenSigningKeyContainer.v3", + nbf: 1459289287, + kty: "RSA", + e: "AQAB", + n: + "s4W7xjkQZP3OwG7PfRgcYKn8eRYXHiz1iK503fS-K2FZo-Ublwwa2xFZWpsUU_jtoVCwIkaqZuo6xoKtlMYXXvfVHGuKBHEBVn8b8x_57BQWz1d0KdrNXxuMvtFe6RzMqiMqzqZrzae4UqVCkYqcR9gQx66Ehq7hPmCxJCkg7ajo7fu6E7dPd34KH2HSYRsaaEA_BcKTeb9H1XE_qEKjog68wUU9Ekfl3FBIRN-1Ah_BoktGFoXyi_jt0-L0-gKcL1BLmUlGzMusvRbjI_0-qj-mc0utGdRjY-xIN2yBj8vl4DODO-wMwfp-cqZbCd9TENyHaTb8iA27s-73L3ExOQ" + }, + { + kid: "IdTokenSigningKeyContainer.v4", + nbf: 1459289287, + use: "enc", + kty: "RSA", + e: "AQAB", + n: + "s4W7xjkQZP3OwG7PfRgcYKn8eRYXHiz1iK503fS-K2FZo-Ublwwa2xFZWpsUU_jtoVCwIkaqZuo6xoKtlMYXXvfVHGuKBHEBVn8b8x_57BQWz1d0KdrNXxuMvtFe6RzMqiMqzqZrzae4UqVCkYqcR9gQx66Ehq7hPmCxJCkg7ajo7fu6E7dPd34KH2HSYRsaaEA_BcKTeb9H1XE_qEKjog68wUU9Ekfl3FBIRN-1Ah_BoktGFoXyi_jt0-L0-gKcL1BLmUlGzMusvRbjI_0-qj-mc0utGdRjY-xIN2yBj8vl4DODO-wMwfp-cqZbCd9TENyHaTb8iA27s-73L3ExOQ" + }, ] }); @@ -289,12 +306,13 @@ describe("JwksClient", () => { client.getSigningKeys((err, keys) => { expect(err).to.be.null; expect(keys).not.to.be.null; - expect(keys.length).to.equal(2); + expect(keys.length).to.equal(3); expect(keys[0].rsaPublicKey).not.to.be.null; expect(keys[0].kid).to.equal("IdTokenSigningKeyContainer"); expect(keys[1].kid).to.equal("IdTokenSigningKeyContainer.v2"); expect(keys[1].rsaPublicKey).not.to.be.null; expect(keys[1].nbf).to.equal(1459289287); + expect(keys[2].rsaPublicKey).not.to.be.null; done(); }); });