Пример #1
0
        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());
        }
Пример #2
0
        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));
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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""
    }
  ]
}"
            });
        }