У меня есть приложение, использующее. net идентификатор ядра (3.0) и роли. на странице Index.cs html я использую User.IsInRole для отображения различного контента в зависимости от ролей. Я использовал для проверки подлинности формы и все работает после входа пользователя. Сейчас я пытаюсь перейти на встроенную windows аутентификацию. В Startup.cs я добавил в ConfigureServices
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
в Configure, я использую
app.UseAuthentication();
app.UseAuthorization();
При первой загрузке страницы индекса она проходит аутентификацию windows, но не получает роли, поэтому страницы не будут отображаться правильно. Но последующее посещение страницы (например, если я обновлю sh страницу) загрузит роли и отобразит страницу правильно.
Редактировать Я впервые заметил, что при загрузке страницы индекса, User.Identity имеет AuthenticationType = "Negotiate", а User.Identity - это WindowsIdentity, после обновления страницы User.Identity - это ClaimsIdentity, а AuthenticationType был изменен на "Identity.Application". Поэтому мне кажется, что при первой загрузке не было идентификатора windows, преобразованного в идентификатор приложения. Я добавил
string id = await _userManager.FindByNameAsync(User.Identity.Name.Split('\\').Last()).Id;
appUser = await _userManager.FindByIdAsync(id);
appUser.Roles = await _userManager.GetRolesAsync(appUser);
appUser.Roles = (from string item in appUser.Roles orderby item select item).ToList();
await _signInManager.SignInAsync(appUser, false);
Результат тот же. Есть ли способ заменить текущего пользователя на пользователя SignedIn (в данном случае appUser)?