/// <summary>
        /// Adds an additional RSA private key for a known service. Useful if you plan to process Webhook requests for a service.
        /// </summary>
        /// <param name="serviceId">The unique service ID</param>
        /// <param name="pemKey">The private key contents</param>
        /// <returns>The builder</returns>
        public FactoryFactoryBuilder AddServicePrivateKey(string serviceId, string pemKey)
        {
            var crypto      = GetCrypto();
            var key         = crypto.LoadRsaPrivateKey(pemKey);
            var fingerprint = crypto.GeneratePublicKeyFingerprintFromPrivateKey(key);

            _entityKeyMap.AddKey(
                new EntityIdentifier(EntityType.Service, Guid.Parse(serviceId)),
                fingerprint,
                key
                );
            return(this);
        }
Exemplo n.º 2
0
        public void AddKey_ShouldOverwrite()
        {
            var km         = new EntityKeyMap();
            var rsa        = new RSACryptoServiceProvider();
            var identifier = new EntityIdentifier(EntityType.Directory, Guid.NewGuid());

            km.AddKey(identifier, "key", rsa);
            var rsa2 = km.GetKey(identifier, "key");

            Assert.AreSame(rsa, rsa2);

            var rsa3 = new RSACryptoServiceProvider();

            km.AddKey(identifier, "key", rsa3);

            var rsa4 = km.GetKey(identifier, "key");

            Assert.AreSame(rsa3, rsa4);
        }
Exemplo n.º 3
0
        private ITransport MakeTransport(
            EntityIdentifier issuer,
            Dictionary <string, RSA> privateKeys,
            string currentPrivateKey)
        {
            foreach (var key in privateKeys)
            {
                _entityKeyMap.AddKey(issuer, key.Key, key.Value);
            }

            return(new WebClientTransport(
                       _httpClient,
                       _crypto,
                       _keyCache,
                       _apiBaseUrl,
                       issuer,
                       new JwtService(new UnixTimeConverter(), _apiIdentifier, privateKeys, currentPrivateKey, _requestExpireSeconds),
                       new JweService(privateKeys[currentPrivateKey]),
                       _offsetTtl,
                       _currentPublicKeyTtl,
                       _entityKeyMap,
                       new JsonNetJsonEncoder()
                       ));
        }