public void Read() { var key = RsaJwk.FromBase64Url ( n: "w7Zdfmece8iaB0kiTY8pCtiBtzbptJmP28nSWwtdjRu0f2GFpajvWE4VhfJAjEsOcwYzay7XGN0b-X84BfC8hmCTOj2b2eHT7NsZegFPKRUQzJ9wW8ipn_aDJWMGDuB1XyqT1E7DYqjUCEOD1b4FLpy_xPn6oV_TYOfQ9fZdbE5HGxJUzekuGcOKqOQ8M7wfYHhHHLxGpQVgL0apWuP2gDDOdTtpuld4D2LK1MZK99s9gaSjRHE8JDb1Z4IGhEcEyzkxswVdPndUWzfvWBBWXWxtSUvQGBRkuy1BHOa4sP6FKjWEeeF7gm7UMs2Nm2QUgNZw6xvEDGaLk4KASdIxRQ", e: "AQAB", alg: SignatureAlgorithm.RS256 ); key.Kid = JsonEncodedText.Encode("1e9gdk7"); var policy = new TokenValidationPolicyBuilder() .RequireSignatureByDefault(key) .Build(); var result = Jwt.TryParse("eyJraWQiOiIxZTlnZGs3IiwiYWxnIjoiUlMyNTYifQ.ewogImlzcyI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZfV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5NzAsCiAibmFtZSI6ICJKYW5lIERvZSIsCiAiZ2l2ZW5fbmFtZSI6ICJKYW5lIiwKICJmYW1pbHlfbmFtZSI6ICJEb2UiLAogImdlbmRlciI6ICJmZW1hbGUiLAogImJpcnRoZGF0ZSI6ICIwMDAwLTEwLTMxIiwKICJlbWFpbCI6ICJqYW5lZG9lQGV4YW1wbGUuY29tIiwKICJwaWN0dXJlIjogImh0dHA6Ly9leGFtcGxlLmNvbS9qYW5lZG9lL21lLmpwZyIKfQ.rHQjEmBqn9Jre0OLykYNnspA10Qql2rvx4FsD00jwlB0Sym4NzpgvPKsDjn_wMkHxcp6CilPcoKrWHcipR2iAjzLvDNAReF97zoJqq880ZD1bwY82JDauCXELVR9O6_B0w3K-E7yM2macAAgNCUwtik6SjoSUZRcf-O5lygIyLENx882p6MtmwaL1hd6qn5RZOQ0TLrOYu0532g9Exxcm-ChymrB4xLykpDj3lUivJt63eEGGN6DH5K6o33TcxkIjNrCD4XB1CKKumZvCedgHHF3IAK4dVEDSUoGlH9z4pP_eWYNXvqQOjGs-rDaQzUHl6cQQWNiDpWOl_lxXjQEvQ", policy, out var jwt); Assert.True(result); Assert.Equal("http://server.example.com", jwt.Payload["iss"].GetString()); Assert.Equal("248289761001", jwt.Payload["sub"].GetString()); Assert.Equal("s6BhdRkqt3", jwt.Payload["aud"].GetString()); Assert.Equal("n-0S6_WzA2Mj", jwt.Payload["nonce"].GetString()); Assert.Equal(1311281970, jwt.Payload["exp"].GetInt64()); Assert.Equal(1311280970, jwt.Payload["iat"].GetInt64()); Assert.Equal("Jane Doe", jwt.Payload["name"].GetString()); Assert.Equal("Jane", jwt.Payload["given_name"].GetString()); Assert.Equal("Doe", jwt.Payload["family_name"].GetString()); Assert.Equal("female", jwt.Payload["gender"].GetString()); Assert.Equal("0000-10-31", jwt.Payload["birthdate"].GetString()); Assert.Equal("*****@*****.**", jwt.Payload["email"].GetString()); Assert.Equal("http://example.com/janedoe/me.jpg", jwt.Payload["picture"].GetString()); }
public void Write_Binary() { var data = new byte[256]; FillData(data); var key = RsaJwk.FromBase64Url ( n: "sXchDaQebHnPiGvyDOAT4saGEUetSyo9MKLOoWFsueri23bOdgWp4Dy1WlUzewbgBHod5pcM9H95GQRV3JDXboIRROSBigeC5yjU1hGzHHyXss8UDprecbAYxknTcQkhslANGRUZmdTOQ5qTRsLAt6BTYuyvVRdhS8exSZEy_c4gs_7svlJJQ4H9_NxsiIoLwAEk7-Q3UXERGYw_75IDrGA84-lA_-Ct4eTlXHBIY2EaV7t7LjJaynVJCpkv4LKjTTAumiGUIuQhrNhZLuF_RJLqHpM2kgWFLU7-VTdL1VbC2tejvcI2BlMkEpk1BzBZI0KQB0GaDWFLN-aEAw3vRw", e: "AQAB", d: "VFCWOqXr8nvZNyaaJLXdnNPXZKRaWCjkU5Q2egQQpTBMwhprMzWzpR8Sxq1OPThh_J6MUD8Z35wky9b8eEO0pwNS8xlh1lOFRRBoNqDIKVOku0aZb-rynq8cxjDTLZQ6Fz7jSjR1Klop-YKaUHc9GsEofQqYruPhzSA-QgajZGPbE_0ZaVDJHfyd7UUBUKunFMScbflYAAOYJqVIVwaYR5zWEEceUjNnTNo_CVSj-VvXLO5VZfCUAVLgW4dpf1SrtZjSt34YLsRarSb127reG_DUwg9Ch-KyvjT1SkHgUWRVGcyly7uvVGRSDwsXypdrNinPA4jlhoNdizK2zF2CWQ", p: "9gY2w6I6S6L0juEKsbeDAwpd9WMfgqFoeA9vEyEUuk4kLwBKcoe1x4HG68ik918hdDSE9vDQSccA3xXHOAFOPJ8R9EeIAbTi1VwBYnbTp87X-xcPWlEPkrdoUKW60tgs1aNd_Nnc9LEVVPMS390zbFxt8TN_biaBgelNgbC95sM", q: "uKlCKvKv_ZJMVcdIs5vVSU_6cPtYI1ljWytExV_skstvRSNi9r66jdd9-yBhVfuG4shsp2j7rGnIio901RBeHo6TPKWVVykPu1iYhQXw1jIABfw-MVsN-3bQ76WLdt2SDxsHs7q7zPyUyHXmps7ycZ5c72wGkUwNOjYelmkiNS0", dp: "w0kZbV63cVRvVX6yk3C8cMxo2qCM4Y8nsq1lmMSYhG4EcL6FWbX5h9yuvngs4iLEFk6eALoUS4vIWEwcL4txw9LsWH_zKI-hwoReoP77cOdSL4AVcraHawlkpyd2TWjE5evgbhWtOxnZee3cXJBkAi64Ik6jZxbvk-RR3pEhnCs", dq: "o_8V14SezckO6CNLKs_btPdFiO9_kC1DsuUTd2LAfIIVeMZ7jn1Gus_Ff7B7IVx3p5KuBGOVF8L-qifLb6nQnLysgHDh132NDioZkhH7mI7hPG-PYE_odApKdnqECHWw0J-F0JWnUd6D2B_1TvF9mXA2Qx-iGYn8OVV1Bsmp6qU", qi: "eNho5yRBEBxhGBtQRww9QirZsB66TrfFReG_CcteI1aCneT0ELGhYlRlCtUkTRclIfuEPmNsNDPbLoLqqCVznFbvdB7x-Tl-m0l_eFTj2KiqwGqE9PZB9nNTwMVvH3VRRSLWACvPnSiwP8N5Usy-WRXS-V7TbpxIhvepTfE0NNo", alg: KeyManagementAlgorithm.Rsa1_5 ); var descriptor = new BinaryJweDescriptor(key, KeyManagementAlgorithm.Rsa1_5, EncryptionAlgorithm.A128CbcHS256) { Payload = data }; JwtWriter writer = new JwtWriter(); var value = writer.WriteToken(descriptor); Assert.NotNull(value); var policy = new TokenValidationPolicyBuilder() .WithDecryptionKey(key) .IgnoreSignatureByDefault() .Build(); var result = Jwt.TryParse(value, policy, out var jwt); Assert.True(result); Assert.True(jwt.RawValue.Span.SequenceEqual(data)); }
static void Main() { // Key sample from https://tools.ietf.org/html/rfc7517#appendix-C var rsaKey = RsaJwk.FromBase64Url ( n: "t6Q8PWSi1dkJj9hTP8hNYFlvadM7DflW9mWepOJhJ66w7nyoK1gPNqFMSQRyO125Gp-TEkodhWr0iujjHVx7BcV0llS4w5ACGgPrcAd6ZcSR0-Iqom-QFcNP8Sjg086MwoqQU_LYywlAGZ21WSdS_PERyGFiNnj3QQlO8Yns5jCtLCRwLHL0Pb1fEv45AuRIuUfVcPySBWYnDyGxvjYGDSM-AqWS9zIQ2ZilgT-GqUmipg0XOC0Cc20rgLe2ymLHjpHciCKVAbY5-L32-lSeZO-Os6U15_aXrk9Gw8cPUaX1_I8sLGuSiVdt3C_Fn2PZ3Z8i744FPFGGcG1qs2Wz-Q", e: "AQAB", d: "GRtbIQmhOZtyszfgKdg4u_N-R_mZGU_9k7JQ_jn1DnfTuMdSNprTeaSTyWfSNkuaAwnOEbIQVy1IQbWVV25NY3ybc_IhUJtfri7bAXYEReWaCl3hdlPKXy9UvqPYGR0kIXTQRqns-dVJ7jahlI7LyckrpTmrM8dWBo4_PMaenNnPiQgO0xnuToxutRZJfJvG4Ox4ka3GORQd9CsCZ2vsUDmsXOfUENOyMqADC6p1M3h33tsurY15k9qMSpG9OX_IJAXmxzAh_tWiZOwk2K4yxH9tS3Lq1yX8C1EWmeRDkK2ahecG85-oLKQt5VEpWHKmjOi_gJSdSgqcN96X52esAQ", p: "2rnSOV4hKSN8sS4CgcQHFbs08XboFDqKum3sc4h3GRxrTmQdl1ZK9uw-PIHfQP0FkxXVrx-WE-ZEbrqivH_2iCLUS7wAl6XvARt1KkIaUxPPSYB9yk31s0Q8UK96E3_OrADAYtAJs-M3JxCLfNgqh56HDnETTQhH3rCT5T3yJws", q: "1u_RiFDP7LBYh3N4GXLT9OpSKYP0uQZyiaZwBtOCBNJgQxaj10RWjsZu0c6Iedis4S7B_coSKB0Kj9PaPaBzg-IySRvvcQuPamQu66riMhjVtG6TlV8CLCYKrYl52ziqK0E_ym2QnkwsUX7eYTB7LbAHRK9GqocDE5B0f808I4s", dp: "KkMTWqBUefVwZ2_Dbj1pPQqyHSHjj90L5x_MOzqYAJMcLMZtbUtwKqvVDq3tbEo3ZIcohbDtt6SbfmWzggabpQxNxuBpoOOf_a_HgMXK_lhqigI4y_kqS1wY52IwjUn5rgRrJ-yYo1h41KR-vz2pYhEAeYrhttWtxVqLCRViD6c", dq: "AvfS0-gRxvn0bwJoMSnFxYcK1WnuEjQFluMGfwGitQBWtfZ1Er7t1xDkbN9GQTB9yqpDoYaN06H7CFtrkxhJIBQaj6nkF5KKS3TQtQ5qCzkOkmxIe3KRbBymXxkb5qwUpX5ELD5xFc6FeiafWYY63TmmEAu_lRFCOJ3xDea-ots", qi: "lSQi-w9CpyUReMErP1RsBLk7wNtOvs5EQpPqmuMvqW57NBUczScEoPwmUqqabu9V0-Py4dQ57_bapoKRu1R90bvuFnU63SHWEFglZQvJDMeAvmj4sm-Fp0oYu_neotgQ0hzbI5gry7ajdYy9-2lNx_76aBZoOUu9HCJ-UsfSOI8" ); rsaKey.Kid = JsonEncodedText.Encode("*****@*****.**"); rsaKey.Use = JwkUseValues.Enc; // Generates the password based key var sharedPassword = PasswordBasedJwk.FromPassphrase("Thus from my lips, by yours, my sin is purged.", iterationCount: 4096, saltSizeInBytes: 16, computeThumbprint: false); // Creates the JWE descriptor for JWK // The descriptor sets the 'alg' with value 'PBES2-HS256+A128KW' and 'enc' with value 'A128CBC-HS256' var descriptor = new JwkJweDescriptor(sharedPassword, KeyManagementAlgorithm.Pbes2HS256A128KW, EncryptionAlgorithm.A128CbcHS256) { Payload = rsaKey }; // Generates the UTF-8 string representation of the JWT var writer = new JwtWriter(); var token = writer.WriteTokenString(descriptor); Console.WriteLine("The JWT is:"); Console.WriteLine(descriptor); Console.WriteLine(); Console.WriteLine("Its compact form is:"); Console.WriteLine(token); }
public void Factory() { var kid = JsonEncodedText.Encode("RuGrMG6-Xv3nZp-KaC_WmcwN1W7epSOnZXjIEDKugTE"); var s_e = "AQAB"; var s_n = "uyNaTUSDYSzexCCtHEcC8aTrAn80iSueyawKxkc58y_66H4NasGBPCoj2ldfvs35DIR-FcoOmtFH9bOTjq7iXQ"; var s_d = "JuoHESI6H67w89_Hn6W0mwMsS2ygRBXqAw3ff7O3_TWV74dI6D32xssm5Kw9dZ-glQTHLb1Ze3zsETOS0DpqEQ"; var s_dp = "quGD4O4sGxrwjtudAEQrJLqVd1dTKuXxKI5nwaLqL2k"; var s_dq = "SlA1yPjn7trMdIJh4CeniYhilBK_kS6IoPH0bgdx_nE"; var s_p = "1sEtUC-Bbg60vg_OfvmObWcpL-CiIRK7wY3V3EZbPgM"; var s_q = "3xRbedccU7VGQOanMbxcggQU-KbU_RHYODiI9Vn2IB8"; var s_qi = "nqROjNAHls0Kh6CxcswXgyD0pDwl-p4QQYH4O4qUdNw"; var e = Base64Url.Decode(s_e); var n = Base64Url.Decode(s_n); var d = Base64Url.Decode(s_d); var dp = Base64Url.Decode(s_dp); var dq = Base64Url.Decode(s_dq); var p = Base64Url.Decode(s_p); var q = Base64Url.Decode(s_q); var qi = Base64Url.Decode(s_qi); // FromBase64Url var key = RsaJwk.FromBase64Url(n: s_n, e: s_e, KeyManagementAlgorithm.RsaOaep, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.Equal(kid, key.Kid); key = RsaJwk.FromBase64Url(n: s_n, e: s_e, KeyManagementAlgorithm.RsaOaep, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); key = RsaJwk.FromBase64Url(n: s_n, e: s_e, d: s_d, p: s_p, q: s_q, dp: s_dp, dq: s_dq, qi: s_qi, KeyManagementAlgorithm.RsaOaep, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.Equal(kid, key.Kid); key = RsaJwk.FromBase64Url(n: s_n, e: s_e, d: s_d, p: s_p, q: s_q, dp: s_dp, dq: s_dq, qi: s_qi, KeyManagementAlgorithm.RsaOaep, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); key = RsaJwk.FromBase64Url(n: s_n, e: s_e, SignatureAlgorithm.RS256, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.Equal(kid, key.Kid); key = RsaJwk.FromBase64Url(n: s_n, e: s_e, SignatureAlgorithm.RS256, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); key = RsaJwk.FromBase64Url(n: s_n, e: s_e, d: s_d, p: s_p, q: s_q, dp: s_dp, dq: s_dq, qi: s_qi, SignatureAlgorithm.RS256, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.Equal(kid, key.Kid); key = RsaJwk.FromBase64Url(n: s_n, e: s_e, d: s_d, p: s_p, q: s_q, dp: s_dp, dq: s_dq, qi: s_qi, SignatureAlgorithm.RS256, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); // FromByteArray key = RsaJwk.FromByteArray(n: n, e: e, KeyManagementAlgorithm.RsaOaep, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.Equal(kid, key.Kid); key = RsaJwk.FromByteArray(n: n, e: e, KeyManagementAlgorithm.RsaOaep, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); key = RsaJwk.FromByteArray(n: n, e: e, d: d, p: p, q: q, dp: dp, dq: dq, qi: qi, KeyManagementAlgorithm.RsaOaep, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.Equal(kid, key.Kid); key = RsaJwk.FromByteArray(n: n, e: e, d: d, p: p, q: q, dp: dp, dq: dq, qi: qi, KeyManagementAlgorithm.RsaOaep, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); key = RsaJwk.FromByteArray(n: n, e: e, SignatureAlgorithm.RS256, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.Equal(kid, key.Kid); key = RsaJwk.FromByteArray(n: n, e: e, SignatureAlgorithm.RS256, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.IsEmpty); Assert.True(key.P.IsEmpty); Assert.True(key.Q.IsEmpty); Assert.True(key.DP.IsEmpty); Assert.True(key.DQ.IsEmpty); Assert.True(key.QI.IsEmpty); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); key = RsaJwk.FromByteArray(n: n, e: e, d: d, p: p, q: q, dp: dp, dq: dq, qi: qi, SignatureAlgorithm.RS256, computeThumbprint: true); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.Equal(kid, key.Kid); key = RsaJwk.FromByteArray(n: n, e: e, d: d, p: p, q: q, dp: dp, dq: dq, qi: qi, SignatureAlgorithm.RS256, computeThumbprint: false); Assert.True(key.N.SequenceEqual(n)); Assert.True(key.E.SequenceEqual(e)); Assert.True(key.D.SequenceEqual(d)); Assert.True(key.P.SequenceEqual(p)); Assert.True(key.Q.SequenceEqual(q)); Assert.True(key.DP.SequenceEqual(dp)); Assert.True(key.DQ.SequenceEqual(dq)); Assert.True(key.QI.SequenceEqual(qi)); Assert.True(key.Kid.EncodedUtf8Bytes.IsEmpty); }
public static IEnumerable <object[]> GetJwks() { yield return(new object[] { new Jwks(), @"{ ""keys"": [] }" }); // https://login.salesforce.com/id/keys var sfdcKey1 = RsaJwk.FromBase64Url (n: "zZ6iZhgNHEgGA_U2ipme9C9qDJRTxSzTwjAE0g2-zZg7KBsTcJ7zNKcCS9b-9J-l5y500_75IAsnC-c7qUHw46SYqPWBZKosg5cEGyC_pB1coQzPq1NNbmSfg4gRwThCmmyp_bypK22-F5hdJp3dRZn7_moQ71hPstTc9MTZgyD5xi9l-PFuD5iDhtAqXKP9yE8ktVAvU8FRcf2DeA1DD3EzjtV-to23_rbynXfY3Bv42lLEstMIbZ0tQ_K4XxCSoc0GP4tp1JAXEIpPXNY6Zt2a0wk5MSmZkvQk9ty-r94SA-0rYmXQ6VOt_WaWufIynJBhKqKn_CvQl4EDXBbEBhG16dgs8vYhj_JAP83syY5XDVWAkHs05nMZoE4rfAw3meb-AyDwOCi-MV11GBslRIfJPmxVitIdHnO2_6YzXAu53fIuC5i7eqBxqOju7GNaceaQDSFDSxr4pUR5DuskDiNrQ3YmoSLgdGITIfzdYsbWj2QdeO9nPy9SlngPZYv73rvXF7eghCNvOo8hptG_h4G5ScmJ8wPUDH2VuLtdIbyg476oY3elAWu3YtTT3SGos-Mk4rxwAjWbddoOrMFnK6ShWahZwxEyBA9xPddAM7hJXq8FuJenANg2waKqhIFuWre7JylezAFOXKZW0rzhF6jurCYui7p79YyZqHugEiE", e: "AQAB", alg: SignatureAlgorithm.RS256); sfdcKey1.Kid = JsonEncodedText.Encode("216"); sfdcKey1.Use = JwkUseValues.Sig; var sfdcKey2 = RsaJwk.FromBase64Url (n: "yb3JETE4C4THs29DLZlysUhv1Ftwqck7-WBEPNqFEy5UmwP26DZ3spSjY0iG7Zp9-gTfMLF1ygLUqT-7FBSjx1nJkx3rda8xJUUsqLmrZok7K623dvd6E8kbAyGnpgRsqTL-KTketHv-aDy8Sg9DvITLrp9_5oYqp4i_7jLQuJyHrFwgP7U7HJzPaNdgu1wQ4UkZobc4qt2aw4ux7F0cLw8gmUBzCLos1xe8_RzxkYYQv3j5Q3aNxlpDGFLZlFGJLSwbV3aNLMacAEDHrZNyyE_DvHj8VingSXLl68C3iRR2vGKIxoyG1MWn7a2E0ruwnr9djMHyFD97l85OHNk_wx_uHBisX44KRnW24qQSptgk4g_5ZEI-Mjwk0_MyAoaEhoFplarhMm87bFZTlEb0UvWr6oQN4ZqYIriRDEQwHFk17P2YzD5OvmihyyfsBHURYKYTEOVgSgQZIhmfmrf8DXbAXuvQz0rSfu2gGq2li4Y0sPUR9pnuRyCeZGJ3N4iYSTiTFhLXvq3Xjv4TUReDICoxpQLRnX2wFBC5erts0bmscMt15w1ZqyRtSN77hkKwRpcCSH_Frd1MP5GduyUyfZGsCp45D-9LEhnLSMSNDtQj0mqx3F7opyphqz6675P99qQALF0tQBN4mUYVapuNWvWgDtrYOHIswx3fPHYmBi8", e: "AQAB", alg: SignatureAlgorithm.RS256); sfdcKey2.Kid = JsonEncodedText.Encode("220"); sfdcKey2.Use = JwkUseValues.Sig; var sfdcKey3 = RsaJwk.FromBase64Url (n: "oDkKtNtFuHrGXiQOZmeKJvFot5NggosQf37wpxM5Mwem575SyI4y8aZsZB5W9-5fIdWwANljYEKbRYscIG2F8v6Cp4CHSMdx4e6U26zY-6aJ9msyefghlgnGegPgEYqS8oPBgWBQ7C6D8tmfvr9OZ6UpD7BoKgmhELlxUiR-3wmBfhBW_OZQIJ6l4dk5lyf1I9bCWY7rLkg8VSpkihAwewPhN3FvP-zngxkUgUG-ayuwP77VSSu3dwfs4wTbjrL0juXINXOU0CwHp49JpIr184ofWY6UfrsfvIMXenCBkuzAUaGSSKSixNM-bXFq3lxGbJINZ-GiF0wNGKXTRQmGQYWTHdIJkEvYxFUo90Mqcd_IHJpPfb3_9vM1jbB5DWl1YgrAoXR3U1bIEZ3AAaqP5XynhbKu-XJI4YwC0pvhICEjs3lSxKN9Wt1Ivl33K-Tlgg6ukqpgB2yqSb3TRRYD4c98N0zGEP_Wt7RHKtf7vdeo2i7WYk-hI8Lh1ljxVJKruZoIRpDJYIwpvar89UEe3F1q_oqFE0o1SYBM3zW_mkgeUx4e1Ijerd5fKYStJ4he9pn8pIb-e9kBKG9RjzwbbDkar5DiqGIj_C77ezlewLw4Cr5zoDp7l4lANmG4mYMdCvilthB3dQVftrJdPq8gHUALD3oheBvCpRw0-D3VYxc", e: "AQAB", alg: SignatureAlgorithm.RS256); sfdcKey3.Kid = JsonEncodedText.Encode("218"); sfdcKey3.Use = JwkUseValues.Sig; yield return(new object[] { new Jwks { sfdcKey1, sfdcKey2, sfdcKey3 }, @"{ ""keys"": [ { ""kty"": ""RSA"", ""kid"": ""216"", ""use"": ""sig"", ""alg"": ""RS256"", ""e"": ""AQAB"", ""n"": ""zZ6iZhgNHEgGA_U2ipme9C9qDJRTxSzTwjAE0g2-zZg7KBsTcJ7zNKcCS9b-9J-l5y500_75IAsnC-c7qUHw46SYqPWBZKosg5cEGyC_pB1coQzPq1NNbmSfg4gRwThCmmyp_bypK22-F5hdJp3dRZn7_moQ71hPstTc9MTZgyD5xi9l-PFuD5iDhtAqXKP9yE8ktVAvU8FRcf2DeA1DD3EzjtV-to23_rbynXfY3Bv42lLEstMIbZ0tQ_K4XxCSoc0GP4tp1JAXEIpPXNY6Zt2a0wk5MSmZkvQk9ty-r94SA-0rYmXQ6VOt_WaWufIynJBhKqKn_CvQl4EDXBbEBhG16dgs8vYhj_JAP83syY5XDVWAkHs05nMZoE4rfAw3meb-AyDwOCi-MV11GBslRIfJPmxVitIdHnO2_6YzXAu53fIuC5i7eqBxqOju7GNaceaQDSFDSxr4pUR5DuskDiNrQ3YmoSLgdGITIfzdYsbWj2QdeO9nPy9SlngPZYv73rvXF7eghCNvOo8hptG_h4G5ScmJ8wPUDH2VuLtdIbyg476oY3elAWu3YtTT3SGos-Mk4rxwAjWbddoOrMFnK6ShWahZwxEyBA9xPddAM7hJXq8FuJenANg2waKqhIFuWre7JylezAFOXKZW0rzhF6jurCYui7p79YyZqHugEiE"" }, { ""kty"": ""RSA"", ""kid"": ""220"", ""use"": ""sig"", ""alg"": ""RS256"", ""e"": ""AQAB"", ""n"": ""yb3JETE4C4THs29DLZlysUhv1Ftwqck7-WBEPNqFEy5UmwP26DZ3spSjY0iG7Zp9-gTfMLF1ygLUqT-7FBSjx1nJkx3rda8xJUUsqLmrZok7K623dvd6E8kbAyGnpgRsqTL-KTketHv-aDy8Sg9DvITLrp9_5oYqp4i_7jLQuJyHrFwgP7U7HJzPaNdgu1wQ4UkZobc4qt2aw4ux7F0cLw8gmUBzCLos1xe8_RzxkYYQv3j5Q3aNxlpDGFLZlFGJLSwbV3aNLMacAEDHrZNyyE_DvHj8VingSXLl68C3iRR2vGKIxoyG1MWn7a2E0ruwnr9djMHyFD97l85OHNk_wx_uHBisX44KRnW24qQSptgk4g_5ZEI-Mjwk0_MyAoaEhoFplarhMm87bFZTlEb0UvWr6oQN4ZqYIriRDEQwHFk17P2YzD5OvmihyyfsBHURYKYTEOVgSgQZIhmfmrf8DXbAXuvQz0rSfu2gGq2li4Y0sPUR9pnuRyCeZGJ3N4iYSTiTFhLXvq3Xjv4TUReDICoxpQLRnX2wFBC5erts0bmscMt15w1ZqyRtSN77hkKwRpcCSH_Frd1MP5GduyUyfZGsCp45D-9LEhnLSMSNDtQj0mqx3F7opyphqz6675P99qQALF0tQBN4mUYVapuNWvWgDtrYOHIswx3fPHYmBi8"" }, { ""kty"": ""RSA"", ""kid"": ""218"", ""use"": ""sig"", ""alg"": ""RS256"", ""e"": ""AQAB"", ""n"": ""oDkKtNtFuHrGXiQOZmeKJvFot5NggosQf37wpxM5Mwem575SyI4y8aZsZB5W9-5fIdWwANljYEKbRYscIG2F8v6Cp4CHSMdx4e6U26zY-6aJ9msyefghlgnGegPgEYqS8oPBgWBQ7C6D8tmfvr9OZ6UpD7BoKgmhELlxUiR-3wmBfhBW_OZQIJ6l4dk5lyf1I9bCWY7rLkg8VSpkihAwewPhN3FvP-zngxkUgUG-ayuwP77VSSu3dwfs4wTbjrL0juXINXOU0CwHp49JpIr184ofWY6UfrsfvIMXenCBkuzAUaGSSKSixNM-bXFq3lxGbJINZ-GiF0wNGKXTRQmGQYWTHdIJkEvYxFUo90Mqcd_IHJpPfb3_9vM1jbB5DWl1YgrAoXR3U1bIEZ3AAaqP5XynhbKu-XJI4YwC0pvhICEjs3lSxKN9Wt1Ivl33K-Tlgg6ukqpgB2yqSb3TRRYD4c98N0zGEP_Wt7RHKtf7vdeo2i7WYk-hI8Lh1ljxVJKruZoIRpDJYIwpvar89UEe3F1q_oqFE0o1SYBM3zW_mkgeUx4e1Ijerd5fKYStJ4he9pn8pIb-e9kBKG9RjzwbbDkar5DiqGIj_C77ezlewLw4Cr5zoDp7l4lANmG4mYMdCvilthB3dQVftrJdPq8gHUALD3oheBvCpRw0-D3VYxc"" } ] }" }); }