public static IServiceCollection AddAutenticationToken(this IServiceCollection services, IConfiguration configuration)
        {
            AuthTokenProviderConfiguration authProviderConfiguration = new AuthTokenProviderConfiguration();

            configuration.Bind("AuthTokenProviderConfiguration", authProviderConfiguration);
            Assembly      sqlAssembly   = Assembly.LoadFrom(authProviderConfiguration.SqlAssemblyName);
            Type          sqlType       = sqlAssembly.GetType(authProviderConfiguration.SqlConnectionClassNamespace);
            IDbConnection sqlConnection = (IDbConnection)Activator.CreateInstance(sqlType);

            sqlConnection.ConnectionString = authProviderConfiguration.AuthConnectionString;
            object authInstance = Activator.CreateInstance(typeof(AuthenticationTokenProvider), sqlConnection, authProviderConfiguration);

            services.AddSingleton(typeof(IAuthenticationTokenProvider), authInstance);
            byte[] secretKey = Encoding.ASCII.GetBytes(authProviderConfiguration.SecretTokenKey);
            services.AddAuthentication(auth =>
            {
                auth.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                auth.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(token =>
            {
                token.RequireHttpsMetadata      = true;
                token.SaveToken                 = true;
                token.TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey         = new SymmetricSecurityKey(secretKey),
                    ValidIssuer              = authProviderConfiguration.ValidIssuer,
                    ValidAudience            = authProviderConfiguration.ValidAudience,
                    ValidateIssuerSigningKey = true,
                    RequireExpirationTime    = true,
                    ValidateLifetime         = true,
                    ValidateAudience         = true,
                    ValidateIssuer           = true,
                    ClockSkew = TimeSpan.Zero
                };
            });

            return(services);
        }
 public AuthenticationTokenProvider(IDbConnection dbConnection, AuthTokenProviderConfiguration config)
 {
     connection      = dbConnection;
     authTokenConfig = config;
     connection.Open();
 }