public static TokenVerificationKey AsTokenVerificationKey(this JsonWebKey jwk) { X509Certificate2 cert = null; X509CertTokenVerificationKey key = null; if (jwk.X5c != null && jwk.X5c.Count > 0) { cert = new X509Certificate2(Convert.FromBase64String(jwk.X5c.First())); key = new X509CertTokenVerificationKey(cert); return(key); } if (!String.IsNullOrEmpty(jwk.N) && !String.IsNullOrEmpty(jwk.E)) { RsaTokenVerificationKey rsaToken = new RsaTokenVerificationKey(); RSAParameters rsaParams = new RSAParameters() { Modulus = EncodeUtilities.Base64UrlDecode(jwk.N), Exponent = EncodeUtilities.Base64UrlDecode(jwk.E) }; rsaToken.InitFromRsaParameters(rsaParams); return(rsaToken); } throw new NotSupportedException(StringTable.NotSupportedJwkToTokenVerificationKeyConversion); }
public void FetchJWKKeyAsX509TokenVerificationKey() { string keysResponse = @" { ""keys"": [ { ""kty"":""RSA"", ""use"":""sig"", ""kid"":""kriMPdmBvx68skT8-mPAB3BseeA"", ""x5t"":""kriMPdmBvx68skT8-mPAB3BseeA"", ""n"":""kSCWg6q9iYxvJE2NIhSyOiKvqoWCO2GFipgH0sTSAs5FalHQosk9ZNTztX0ywS/AHsBeQPqYygfYVJL6/EgzVuwRk5txr9e3n1uml94fLyq/AXbwo9yAduf4dCHTP8CWR1dnDR+Qnz/4PYlWVEuuHHONOw/blbfdMjhY+C/BYM2E3pRxbohBb3x//CfueV7ddz2LYiH3wjz0QS/7kjPiNCsXcNyKQEOTkbHFi3mu0u13SQwNddhcynd/GTgWN8A+6SN1r4hzpjFKFLbZnBt77ACSiYx+IHK4Mp+NaVEi5wQtSsjQtI++XsokxRDqYLwus1I1SihgbV/STTg5enufuw=="", ""e"":""AQAB"", ""x5c"":[""MIIDPjCCAiqgAwIBAgIQsRiM0jheFZhKk49YD0SK1TAJBgUrDgMCHQUAMC0xKzApBgNVBAMTImFjY291bnRzLmFjY2Vzc2NvbnRyb2wud2luZG93cy5uZXQwHhcNMTQwMTAxMDcwMDAwWhcNMTYwMTAxMDcwMDAwWjAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkSCWg6q9iYxvJE2NIhSyOiKvqoWCO2GFipgH0sTSAs5FalHQosk9ZNTztX0ywS/AHsBeQPqYygfYVJL6/EgzVuwRk5txr9e3n1uml94fLyq/AXbwo9yAduf4dCHTP8CWR1dnDR+Qnz/4PYlWVEuuHHONOw/blbfdMjhY+C/BYM2E3pRxbohBb3x//CfueV7ddz2LYiH3wjz0QS/7kjPiNCsXcNyKQEOTkbHFi3mu0u13SQwNddhcynd/GTgWN8A+6SN1r4hzpjFKFLbZnBt77ACSiYx+IHK4Mp+NaVEi5wQtSsjQtI++XsokxRDqYLwus1I1SihgbV/STTg5enufuwIDAQABo2IwYDBeBgNVHQEEVzBVgBDLebM6bK3BjWGqIBrBNFeNoS8wLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldIIQsRiM0jheFZhKk49YD0SK1TAJBgUrDgMCHQUAA4IBAQCJ4JApryF77EKC4zF5bUaBLQHQ1PNtA1uMDbdNVGKCmSf8M65b8h0NwlIjGGGy/unK8P6jWFdm5IlZ0YPTOgzcRZguXDPj7ajyvlVEQ2K2ICvTYiRQqrOhEhZMSSZsTKXFVwNfW6ADDkN3bvVOVbtpty+nBY5UqnI7xbcoHLZ4wYD251uj5+lo13YLnsVrmQ16NCBYq2nQFNPuNJw6t3XUbwBHXpF46aLT1/eGf/7Xx6iy8yPJX4DyrpFTutDz882RWofGEO5t4Cw+zZg70dJ/hH/ODYRMorfXEW+8uKmXMKmX2wyxMKvfiPbTy5LmAU8Jvjs2tLg4rOBcXWLAIarZ""] } ] }"; JsonWebKey jsonWebKey = FetchAndValidateJsonWebKeyWithCommonProperties(keysResponse); X509CertTokenVerificationKey tokenVerificationKey = jsonWebKey.AsTokenVerificationKey() as X509CertTokenVerificationKey; Assert.IsNotNull(tokenVerificationKey); Assert.IsNotNull(jsonWebKey.X5c); Assert.IsNotNull(jsonWebKey.X5t); X509Certificate2 cert = tokenVerificationKey.X509Certificate2; Assert.IsNotNull(cert); }