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); }