public static IdentityBuilder AddCustomIdentityServices(
            this IServiceCollection services, GlobalSettings globalSettings)
        {
            services.AddSingleton <IOrganizationDuoWebTokenProvider, OrganizationDuoWebTokenProvider>();
            services.Configure <PasswordHasherOptions>(options => options.IterationCount = 100000);
            services.Configure <TwoFactorRememberTokenProviderOptions>(options =>
            {
                options.TokenLifespan = TimeSpan.FromDays(30);
            });

            var identityBuilder = services.AddIdentityWithoutCookieAuth <User, Role>(options =>
            {
                options.User = new UserOptions
                {
                    RequireUniqueEmail        = true,
                    AllowedUserNameCharacters = null // all
                };
                options.Password = new PasswordOptions
                {
                    RequireDigit           = false,
                    RequireLowercase       = false,
                    RequiredLength         = 8,
                    RequireNonAlphanumeric = false,
                    RequireUppercase       = false
                };
                options.ClaimsIdentity = new ClaimsIdentityOptions
                {
                    SecurityStampClaimType = "sstamp",
                    UserNameClaimType      = JwtClaimTypes.Email,
                    UserIdClaimType        = JwtClaimTypes.Subject
                };
                options.Tokens.ChangeEmailTokenProvider = TokenOptions.DefaultEmailProvider;
            });

            identityBuilder
            .AddUserStore <UserStore>()
            .AddRoleStore <RoleStore>()
            .AddTokenProvider <DataProtectorTokenProvider <User> >(TokenOptions.DefaultProvider)
            .AddTokenProvider <AuthenticatorTokenProvider>(
                CoreHelpers.CustomProviderName(TwoFactorProviderType.Authenticator))
            .AddTokenProvider <EmailTokenProvider>(
                CoreHelpers.CustomProviderName(TwoFactorProviderType.Email))
            .AddTokenProvider <YubicoOtpTokenProvider>(
                CoreHelpers.CustomProviderName(TwoFactorProviderType.YubiKey))
            .AddTokenProvider <DuoWebTokenProvider>(
                CoreHelpers.CustomProviderName(TwoFactorProviderType.Duo))
            .AddTokenProvider <U2fTokenProvider>(
                CoreHelpers.CustomProviderName(TwoFactorProviderType.U2f))
            .AddTokenProvider <TwoFactorRememberTokenProvider>(
                CoreHelpers.CustomProviderName(TwoFactorProviderType.Remember))
            .AddTokenProvider <EmailTokenProvider <User> >(TokenOptions.DefaultEmailProvider)
            .AddTokenProvider <WebAuthnTokenProvider>(
                CoreHelpers.CustomProviderName(TwoFactorProviderType.WebAuthn));

            return(identityBuilder);
        }