Идентификация ASP.NET — как изменить требования к паролю при программном создании пользователя

Я использую шаблон ASP.NET Core 1.1 по умолчанию с аутентификацией Individual User Accounts. Следующий код на VS2015 жалуется на требования к паролю (такие как требования к длине, верхний регистр, нижний регистр и т. д.). Я знаю, что мы можем установить эти требования для встроенного RegisterViewModel с помощью DataAnnotations. Но так как я создаю пользователей программно без использования ViewModel, DataAnnotations не будет работать. Вопрос. Как изменить требования к паролю и запустить следующий код:

List<String> usersList = GetAllUsers();

foreach (string s in usersList)
{
    var user = new ApplicationUser { UserName = s, UserRole = "TestRole" };
    var result = await _userManager.CreateAsync(user, "testpassword");
}

person nam    schedule 06.03.2017    source источник
comment
Вы можете добиться этого, только вызвав хранилище напрямую, минуя usermanager (плохая идея) или напрямую записав в таблицу пользователей (худшая идея). Требования к паролю устанавливаются в Startup.cs (с помощью AddIdentity или вы можете явно переопределить его, но тогда он действителен для всего приложения). Лучше всего создать безопасный пароль, даже если вы создаете пользователя в коде   -  person Tseng    schedule 06.03.2017
comment
@Tseng Это очень простое приложение с особыми требованиями к паролю, которые не соответствуют всем требованиям к паролю по умолчанию. Вопрос: 1. Как заменить последнюю строку кода выше кодом, использующим userStore. 2. Если бы я использовал таблицу пользователей напрямую (используя T-SQL), как мне хешировать пароль?   -  person nam    schedule 06.03.2017


Ответы (2)


Вы можете добавить параметры в методе AddIdentity...

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>(options =>
        {
            options.Password.RequireDigit = false;
            options.Password.RequireLowercase = false;
            options.Password.RequireNonAlphanumeric = false;
            options.Password.RequireUppercase = false;
            options.Password.RequiredLength = 1;
            options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@.";
        })
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}
person travis.js    schedule 06.03.2017
comment
AddIdentity в моем файле startup.cs показывает только services.AddIdentity<ApplicationUser, ApplicationRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); - person nam; 06.03.2017
comment
Да, часть параметров — это то, что вам нужно добавить, чтобы изменить параметры пароля. - person travis.js; 06.03.2017

На веб-сайте Microsoft Docs есть обновленный учебник.

Введение в удостоверение в ASP. NET Core

В примере кода есть немного больше информации о других настройках, с которыми вы можете работать, например, options.Password.

person Jack Thomson    schedule 11.10.2017