public void Configure(IStructureAppBuilder builder)
        {
            //TODO: reactor AddAuthentication to allow mutiples authentication schemes

            builder.Services
            .AddAuthentication(c =>
            {
                c.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                c.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, opts =>
            {
                opts.RequireHttpsMetadata      = false;
                opts.SaveToken                 = true;
                opts.Audience                  = options.Audience;
                opts.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = options.CreateSymmetricSecurityKey(),
                    ValidateIssuer           = false,
                    ValidateAudience         = false
                };

                configureJwtBearer?.Invoke(opts);
            });

            builder.Services.AddScoped(
                typeof(IGrantChecker),
                typeof(GrantChecker <,>).MakeGenericType(
                    builder.EntityTypes.User,
                    builder.EntityTypes.Role));

            builder.Services.AddScoped(typeof(SignInManager <>).MakeGenericType(builder.EntityTypes.User));

            builder.Services.AddScoped(
                typeof(IRefreshTokenStore <>),
                typeof(RefreshTokenStore <>));
        }