public void ThrowsExceptionWhenNoX5uHeaderPresent()
        {
            var           mockedCache               = CreateEmptyMockedCache();
            var           resolver                  = new JwtSigningKeyResolver(Mock.Of <HttpClient>(), mockedCache.Object, Options.Create(_options));
            var           token                     = "";
            SecurityToken securityToken             = null;
            var           tokenValidationParameters = new TokenValidationParameters();

            Assert.Throws <NullReferenceException>(() => resolver.IssuerSigningKeyResolver(token, securityToken, "", tokenValidationParameters));
        }
        public void ThrowsExceptionWhenNoX5uHeaderPresent()
        {
            var           mockedCache               = CreateEmptyMockedCache();
            var           mockHandler               = new MockMessageHandler <string>(HttpStatusCode.OK, "");
            var           resolver                  = new JwtSigningKeyResolver(mockedCache.Object, Options.Create(_options), mockHandler, _logger);
            var           token                     = "";
            SecurityToken securityToken             = null;
            var           tokenValidationParameters = new TokenValidationParameters();

            Assert.Throws <NullReferenceException>(() => resolver.IssuerSigningKeyResolver(token, securityToken, "", tokenValidationParameters));
        }
        public void X5uFromHeaderIsUsed()
        {
            var           mockedCache               = CreateEmptyMockedCache();
            var           mockHandler               = new MockMessageHandler <string>(HttpStatusCode.OK, "");
            var           resolver                  = new JwtSigningKeyResolver(mockedCache.Object, Options.Create(_options), mockHandler, _logger);
            var           token                     = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsIng1dSI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC94NXUifQ.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE0NzI1NDk1NDgsImV4cCI6MTUwNDA4NTU0OCwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIkdpdmVuTmFtZSI6IkpvaG5ueSIsIlN1cm5hbWUiOiJSb2NrZXQiLCJFbWFpbCI6Impyb2NrZXRAZXhhbXBsZS5jb20iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.jKg9l0cuTapEFcx9v1pLtBiigK_7EXlCqvKZBoS24XE";
            SecurityToken securityToken             = new JwtSecurityToken(token);
            var           tokenValidationParameters = new TokenValidationParameters();

            try
            {
                var keys = resolver.IssuerSigningKeyResolver(token, securityToken, "", tokenValidationParameters);
            }
            catch (Exception)
            {
            }

            Assert.Equal("http://localhost:5000/x5u", mockHandler.RequestUri.ToString());
        }
        public void CachedKeyIsReturned()
        {
            _options.JwtSigningKeyCacheDuration = 5;
            string key = "key";

            var           mockedCache               = CreateMockedCache(CACHE_KEY, key);
            var           mockHandler               = new MockMessageHandler <string>(HttpStatusCode.BadRequest, "");
            var           resolver                  = new JwtSigningKeyResolver(mockedCache.Object, Options.Create(_options), mockHandler, _logger);
            var           token                     = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsIng1dSI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC94NXUifQ.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE0NzI1NDk1NDgsImV4cCI6MTUwNDA4NTU0OCwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIkdpdmVuTmFtZSI6IkpvaG5ueSIsIlN1cm5hbWUiOiJSb2NrZXQiLCJFbWFpbCI6Impyb2NrZXRAZXhhbXBsZS5jb20iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.jKg9l0cuTapEFcx9v1pLtBiigK_7EXlCqvKZBoS24XE";
            SecurityToken securityToken             = new JwtSecurityToken(token);
            var           tokenValidationParameters = new TokenValidationParameters();

            var keys = resolver.IssuerSigningKeyResolver(token, securityToken, "", tokenValidationParameters);

            var securityKey = keys.First() as SymmetricSecurityKey;

            Assert.NotNull(securityKey);
            Assert.Equal(Encoding.UTF8.GetBytes(key), securityKey.Key);
        }
        public void ResolveKey()
        {
            var           mockedCache               = CreateEmptyMockedCache();
            var           cert                      = "{\"x5u\": \"LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUFqbXJnN3NGeFJkb2JTWkhJMlpqawpucnBGVC9RclhEcFl6VVU4SU1hNFRPa2dFUnRaM09CbFpkbWNieXVmcEJuNTJmWDlYRWVIOVR1QjkxOWNQeEJFCnpKN0NzUmVTK1dxcHk5UFN3K3BtQ2lDZmpIZmx1ZDJ1dzUwbmVYOGVKeFl0ekhDN1VOOCt1QThvQ0tqdzBJM1AKK0VDYTdhVy9EbU1jSS81T3NyaXhlN2ZQenY4Q0V6aFRidzdBOTZuSzIrVkkvVXFGV2Yxb0Rzd2xYOFBPaHpMRQppdWo3eEJpdWJqbDZONERablF5YW84UzJFZ2ZQT05KNG1ySW42VEQwNzEvdE9NaDFHWUF3SnBWQ3YzYWdSUVdHCjhNaWxhYXlyQzRaNTNrNmRLV1FTNklmVTd3NWJnQjEraGdJenBoK05NbzdWWTROYkpYOTZ1b0Q3QW9pQjRvNjYKclMxakNLS3lEcUwwTTkwQzFIaDcrUit5TWhJa0ZkRUdDS0ZHaDNmbDlVREdKNEZEVG1vNGR1MENxbm13bWpvVgpmUmR0eW4rNjFBRHhQNnpkN24xTEFxeVBCNEVreHVrUTc3Sy9PTkxwUnYydHJmdDlvU1VSMWpXTXE3dzEyV1lyCmhZVnhPR1NvNU40RUdCSmpIQXlRZ01DUzhQWGdtN045WGFOdWtlczBZQ3lBTDlYU0JDRTNuNFQ0Qk9XRzlEMkIKQ0QvelV2bjVDRnl3Smh1ZzlSdzRMV3QwbzJHYXlpTjN5SDBwZFhBc2pTRlRiN1ZpdnBPc1cwL3k2aUdmMEJqSwpUOHlYSkVvOG9QcDRIMkl1TDR4TDQ4bW50Qm5WalBzSXRuemlHQ2pxZ0hCN2xxYjdxeXUvNit4dEhnTGxGb2MyCjBLQnZTYURGWWJiRXRPNE5GVnJNdUlFQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ==\"}";
            var           mockHandler               = new MockMessageHandler <string>(HttpStatusCode.OK, cert);
            var           resolver                  = new JwtSigningKeyResolver(mockedCache.Object, Options.Create(_options), mockHandler, _logger);
            var           token                     = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsIng1dSI6Imh0dHA6Ly9sb2NhbGhvc3Q6NTAwMC94NXUifQ.eyJpc3MiOiJPbmxpbmUgSldUIEJ1aWxkZXIiLCJpYXQiOjE0NzI1NDk1NDgsImV4cCI6MTUwNDA4NTU0OCwiYXVkIjoid3d3LmV4YW1wbGUuY29tIiwic3ViIjoianJvY2tldEBleGFtcGxlLmNvbSIsIkdpdmVuTmFtZSI6IkpvaG5ueSIsIlN1cm5hbWUiOiJSb2NrZXQiLCJFbWFpbCI6Impyb2NrZXRAZXhhbXBsZS5jb20iLCJSb2xlIjpbIk1hbmFnZXIiLCJQcm9qZWN0IEFkbWluaXN0cmF0b3IiXX0.jKg9l0cuTapEFcx9v1pLtBiigK_7EXlCqvKZBoS24XE";
            SecurityToken securityToken             = new JwtSecurityToken(token);
            var           tokenValidationParameters = new TokenValidationParameters();

            var keys = resolver.IssuerSigningKeyResolver(token, securityToken, "", tokenValidationParameters);

            Assert.NotNull(keys);
            Assert.NotEmpty(keys);
            Assert.IsType <RsaSecurityKey>(keys.First());

            var key = keys.First() as RsaSecurityKey;

            Assert.Equal(66571, key.Parameters.Modulus.Sum(b => b));
            Assert.Equal(2, key.Parameters.Exponent.Sum(b => b));
        }