예제 #1
0
        public void B()
        {
            var json = this.GetResource("RFC7517_B.json");
            var jwks = JWKS.Parse(json).ToList();

            Assert.AreEqual(1, jwks.Count);

            Assert.IsInstanceOfType(jwks[0].Key, typeof(RSA));
            Assert.IsFalse(jwks[0].IsEncryption);
            Assert.IsTrue(jwks[0].IsSignature);
            Assert.AreEqual("1b94c", jwks[0].Id);

            Assert.IsInstanceOfType(jwks[0].Header["x5c"], typeof(IList));

            IList x5c  = jwks[0].Header["x5c"] as IList;
            var   list = x5c.OfType <string>()
                         .Select(t => Convert.FromBase64String(t))
                         .Select(t => new X509Certificate2(t))
                         .ToList();

            Assert.AreEqual(1, list.Count);

            Assert.IsInstanceOfType(list[0], typeof(X509Certificate2));
            Assert.IsInstanceOfType(list[0].GetRSAPublicKey(), typeof(RSA));

            Assert.AreEqual(
                (jwks[0].Key as RSA).ToXmlString(false),
                list[0].GetRSAPublicKey().ToXmlString(false));
        }
예제 #2
0
        public void B()
        {
            var json = this.GetResource("RFC7517_B.json");
            var jwks = JWKS.Parse(json).ToList();

            Assert.Equal(1, jwks.Count);

            Assert.IsAssignableFrom <RSA>(jwks[0].Key);
            Assert.False(jwks[0].IsEncryption);
            Assert.True(jwks[0].IsSignature);
            Assert.Equal("1b94c", jwks[0].Id);

            Assert.IsAssignableFrom <IList>(jwks[0].Header["x5c"]);

            IList x5c  = jwks[0].Header["x5c"] as IList;
            var   list = x5c.OfType <string>()
                         .Select(t => Convert.FromBase64String(t))
                         .Select(t => new X509Certificate2(t))
                         .ToList();

            Assert.Equal(1, list.Count);

            Assert.IsAssignableFrom <X509Certificate2>(list[0]);
            Assert.IsAssignableFrom <RSA>(list[0].GetRSAPublicKey());

            Assert.Equal(
                (jwks[0].Key as RSA).ExportParameters(false).Modulus,
                list[0].GetRSAPublicKey().ExportParameters(false).Modulus);
        }
예제 #3
0
        public void C()
        {
            const string TOKEN = ""
                                 + "eyJhbGciOiJQQkVTMi1IUzI1NitBMTI4S1ciLCJwMnMiOiIyV0NUY0paMVJ2ZF9DSn"
                                 + "VKcmlwUTF3IiwicDJjIjo0MDk2LCJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiY3R5Ijoi"
                                 + "andrK2pzb24ifQ."
                                 + "TrqXOwuNUfDV9VPTNbyGvEJ9JMjefAVn-TR1uIxR9p6hsRQh9Tk7BA."
                                 + "Ye9j1qs22DmRSAddIh-VnA."
                                 + "AwhB8lxrlKjFn02LGWEqg27H4Tg9fyZAbFv3p5ZicHpj64QyHC44qqlZ3JEmnZTgQo"
                                 + "wIqZJ13jbyHB8LgePiqUJ1hf6M2HPLgzw8L-mEeQ0jvDUTrE07NtOerBk8bwBQyZ6g"
                                 + "0kQ3DEOIglfYxV8-FJvNBYwbqN1Bck6d_i7OtjSHV-8DIrp-3JcRIe05YKy3Oi34Z_"
                                 + "GOiAc1EK21B11c_AE11PII_wvvtRiUiG8YofQXakWd1_O98Kap-UgmyWPfreUJ3lJP"
                                 + "nbD4Ve95owEfMGLOPflo2MnjaTDCwQokoJ_xplQ2vNPz8iguLcHBoKllyQFJL2mOWB"
                                 + "wqhBo9Oj-O800as5mmLsvQMTflIrIEbbTMzHMBZ8EFW9fWwwFu0DWQJGkMNhmBZQ-3"
                                 + "lvqTc-M6-gWA6D8PDhONfP2Oib2HGizwG1iEaX8GRyUpfLuljCLIe1DkGOewhKuKkZ"
                                 + "h04DKNM5Nbugf2atmU9OP0Ldx5peCUtRG1gMVl7Qup5ZXHTjgPDr5b2N731UooCGAU"
                                 + "qHdgGhg0JVJ_ObCTdjsH4CF1SJsdUhrXvYx3HJh2Xd7CwJRzU_3Y1GxYU6-s3GFPbi"
                                 + "rfqqEipJDBTHpcoCmyrwYjYHFgnlqBZRotRrS95g8F95bRXqsaDY7UgQGwBQBwy665"
                                 + "d0zpvTasvfXf_c0MWAl-neFaKOW_Px6g4EUDjG1GWSXV9cLStLw_0ovdApDIFLHYHe"
                                 + "PyagyHjouQUuGiq7BsYwYrwaF06tgB8hV8omLNfMEmDPJaZUzMuHw6tBDwGkzD-tS_"
                                 + "ub9hxrpJ4UsOWnt5rGUyoN2N_c1-TQlXxm5oto14MxnoAyBQBpwIEgSH3Y4ZhwKBhH"
                                 + "PjSo0cdwuNdYbGPpb-YUvF-2NZzODiQ1OvWQBRHSbPWYz_xbGkgD504LRtqRwCO7CC"
                                 + "_CyyURi1sEssPVsMJRX_U4LFEOc82TiDdqjKOjRUfKK5rqLi8nBE9soQ0DSaOoFQZi"
                                 + "GrBrqxDsNYiAYAmxxkos-i3nX4qtByVx85sCE5U_0MqG7COxZWMOPEFrDaepUV-cOy"
                                 + "rvoUIng8i8ljKBKxETY2BgPegKBYCxsAUcAkKamSCC9AiBxA0UOHyhTqtlvMksO7AE"
                                 + "hNC2-YzPyx1FkhMoS4LLe6E_pFsMlmjA6P1NSge9C5G5tETYXGAn6b1xZbHtmwrPSc"
                                 + "ro9LWhVmAaA7_bxYObnFUxgWtK4vzzQBjZJ36UTk4OTB-JvKWgfVWCFsaw5WCHj6Oo"
                                 + "4jpO7d2yN7WMfAj2hTEabz9wumQ0TMhBduZ-QON3pYObSy7TSC1vVme0NJrwF_cJRe"
                                 + "hKTFmdlXGVldPxZCplr7ZQqRQhF8JP-l4mEQVnCaWGn9ONHlemczGOS-A-wwtnmwjI"
                                 + "B1V_vgJRf4FdpV-4hUk4-QLpu3-1lWFxrtZKcggq3tWTduRo5_QebQbUUT_VSCgsFc"
                                 + "OmyWKoj56lbxthN19hq1XGWbLGfrrR6MWh23vk01zn8FVwi7uFwEnRYSafsnWLa1Z5"
                                 + "TpBj9GvAdl2H9NHwzpB5NqHpZNkQ3NMDj13Fn8fzO0JB83Etbm_tnFQfcb13X3bJ15"
                                 + "Cz-Ww1MGhvIpGGnMBT_ADp9xSIyAM9dQ1yeVXk-AIgWBUlN5uyWSGyCxp0cJwx7HxM"
                                 + "38z0UIeBu-MytL-eqndM7LxytsVzCbjOTSVRmhYEMIzUAnS1gs7uMQAGRdgRIElTJE"
                                 + "SGMjb_4bZq9s6Ve1LKkSi0_QDsrABaLe55UY0zF4ZSfOV5PMyPtocwV_dcNPlxLgNA"
                                 + "D1BFX_Z9kAdMZQW6fAmsfFle0zAoMe4l9pMESH0JB4sJGdCKtQXj1cXNydDYozF7l8"
                                 + "H00BV_Er7zd6VtIw0MxwkFCTatsv_R-GsBCH218RgVPsfYhwVuT8R4HarpzsDBufC4"
                                 + "r8_c8fc9Z278sQ081jFjOja6L2x0N_ImzFNXU6xwO-Ska-QeuvYZ3X_L31ZOX4Llp-"
                                 + "7QSfgDoHnOxFv1Xws-D5mDHD3zxOup2b2TppdKTZb9eW2vxUVviM8OI9atBfPKMGAO"
                                 + "v9omA-6vv5IxUH0-lWMiHLQ_g8vnswp-Jav0c4t6URVUzujNOoNd_CBGGVnHiJTCHl"
                                 + "88LQxsqLHHIu4Fz-U2SGnlxGTj0-ihit2ELGRv4vO8E1BosTmf0cx3qgG0Pq0eOLBD"
                                 + "IHsrdZ_CCAiTc0HVkMbyq1M6qEhM-q5P6y1QCIrwg."
                                 + "0HFmhOzsQ98nNWJjIHkR7A";
            const string SECRET = "Thus from my lips, by yours, my sin is purged.";
            var          s      = JWT.Decode(TOKEN, SECRET);
            var          jwks   = JWKS.Parse(s).ToList();

            Assert.AreEqual(1, jwks.Count);

            Assert.IsInstanceOfType(jwks[0].Key, typeof(RSA));
            Assert.IsFalse(jwks[0].IsSignature);
            Assert.IsTrue(jwks[0].IsEncryption);
            Assert.AreEqual("*****@*****.**", jwks[0].Id);
        }
예제 #4
0
        public void A3()
        {
            var json = this.GetResource("RFC7517_A3.json");
            var jwks = JWKS.Parse(json).ToList();

            Assert.Equal(2, jwks.Count);

            Assert.IsAssignableFrom <byte[]>(jwks[0].Key);
            Assert.True(jwks[0].IsEncryption);
            Assert.True(jwks[0].IsSignature);

            Assert.IsAssignableFrom <byte[]>(jwks[1].Key);
            Assert.True(jwks[1].IsEncryption);
            Assert.True(jwks[1].IsSignature);
            Assert.Equal("HMAC key used in JWS spec Appendix A.1 example", jwks[1].Id);
        }
예제 #5
0
        public void A3()
        {
            var json = this.GetResource("RFC7517_A3.json");
            var jwks = JWKS.Parse(json).ToList();

            Assert.AreEqual(2, jwks.Count);

            Assert.IsInstanceOfType(jwks[0].Key, typeof(byte[]));
            Assert.IsTrue(jwks[0].IsEncryption);
            Assert.IsTrue(jwks[0].IsSignature);

            Assert.IsInstanceOfType(jwks[1].Key, typeof(byte[]));
            Assert.IsTrue(jwks[1].IsEncryption);
            Assert.IsTrue(jwks[1].IsSignature);
            Assert.AreEqual("HMAC key used in JWS spec Appendix A.1 example", jwks[1].Id);
        }
예제 #6
0
        public void A2()
        {
            var json = this.GetResource("RFC7517_A2.json");
            var jwks = JWKS.Parse(json).ToList();

            Assert.Equal(2, jwks.Count);

            Assert.IsAssignableFrom <ECDsa>(jwks[0].Key);
            Assert.True(jwks[0].IsEncryption);
            Assert.False(jwks[0].IsSignature);
            Assert.Equal("1", jwks[0].Id);

            Assert.IsAssignableFrom <RSA>(jwks[1].Key);
            Assert.True(jwks[1].IsEncryption);
            Assert.True(jwks[1].IsSignature);
            Assert.Equal("RS256", jwks[1].Header["alg"]);
            Assert.Equal("2011-04-29", jwks[1].Id);
        }
예제 #7
0
        public void A2()
        {
            var json = this.GetResource("RFC7517_A2.json");
            var jwks = JWKS.Parse(json).ToList();

            Assert.AreEqual(2, jwks.Count);

            Assert.IsInstanceOfType(jwks[0].Key, typeof(ECDsa));
            Assert.IsTrue(jwks[0].IsEncryption);
            Assert.IsFalse(jwks[0].IsSignature);
            Assert.AreEqual("1", jwks[0].Id);

            Assert.IsInstanceOfType(jwks[1].Key, typeof(RSA));
            Assert.IsTrue(jwks[1].IsEncryption);
            Assert.IsTrue(jwks[1].IsSignature);
            Assert.AreEqual("RS256", jwks[1].Header["alg"]);
            Assert.AreEqual("2011-04-29", jwks[1].Id);
        }