public AuthServiceMock(KeyType keyType = KeyType.RSA)
        {
            m_server = HttpMockFactory.Create(out m_host);

#pragma warning disable 618
            m_publicKeyDataProvider = PublicKeyDataProviderFactory.CreateInternal(new InMemoryPublicKeyDataProvider());
#pragma warning restore 618

            TimeSpan keyLifetime       = TimeSpan.FromDays(365);
            TimeSpan keyRotationPeriod = TimeSpan.FromDays(182);

            switch (keyType)
            {
            case KeyType.ECDSA_P256:
            case KeyType.ECDSA_P384:
            case KeyType.ECDSA_P521: {
                CngAlgorithm curve;
                switch (keyType)
                {
                case KeyType.ECDSA_P521:
                    curve = CngAlgorithm.ECDsaP521;
                    break;

                case KeyType.ECDSA_P384:
                    curve = CngAlgorithm.ECDsaP384;
                    break;

                case KeyType.ECDSA_P256:
                default:
                    curve = CngAlgorithm.ECDsaP256;
                    break;
                }

                m_privateKeyProvider = EcDsaPrivateKeyProvider
                                       .Factory
                                       .Create(
                    m_publicKeyDataProvider,
                    keyLifetime,
                    keyRotationPeriod,
                    curve
                    );
                break;
            }

            case KeyType.RSA:
            default: {
                m_privateKeyProvider = RsaPrivateKeyProvider
                                       .Factory
                                       .Create(
                    m_publicKeyDataProvider,
                    keyLifetime,
                    keyRotationPeriod
                    );
                break;
            }
            }

            m_tokenSigner = new TokenSigner(m_privateKeyProvider);
        }
        /// <summary>
        /// Creates an <see cref="IAccessTokenValidator"/> instance backed by local public keys.
        /// </summary>
        /// <param name="publicKeyDataProvider">The <see cref="IPublicKeyDataProvider"/> for the local service</param>
        /// <returns>A new <see cref="IAccessTokenValidator"/></returns>
        public static IAccessTokenValidator CreateLocalValidator(
            IPublicKeyDataProvider publicKeyDataProvider
            )
        {
            var publicKeyProvider = new LocalPublicKeyProvider(
                PublicKeyDataProviderFactory.CreateInternal(publicKeyDataProvider),
                new InMemoryPublicKeyCache()
                );

            var result = new AccessTokenValidator(publicKeyProvider);

            return(result);
        }
Esempio n. 3
0
            internal static IPrivateKeyProvider Create(
                IPublicKeyDataProvider publicKeyDataProvider,
                TimeSpan keyLifetime,
                TimeSpan keyRotationPeriod,
                CngAlgorithm algorithm,
                IDateTimeProvider dateTimeProvider = null
                )
            {
                if (keyLifetime < keyRotationPeriod)
                {
                    throw new ArgumentException("Private key lifetime must exceed the rotation period", "keyLifetime");
                }

                dateTimeProvider = dateTimeProvider ?? DateTimeProvider.Instance;

                ID2LSecurityTokenFactory d2lSecurityTokenFactory = new D2LSecurityTokenFactory(
                    dateTimeProvider,
                    keyLifetime
                    );

                IPrivateKeyProvider privateKeyProvider = new EcDsaPrivateKeyProvider(
                    d2lSecurityTokenFactory,
                    algorithm
                    );

                privateKeyProvider = new SavingPrivateKeyProvider(
                    privateKeyProvider,
                    PublicKeyDataProviderFactory.CreateInternal(publicKeyDataProvider)
                    );

                privateKeyProvider = new RotatingPrivateKeyProvider(
                    privateKeyProvider,
                    dateTimeProvider,
                    keyRotationPeriod
                    );

                return(privateKeyProvider);
            }