Застрял из-за нехватки информации при попытке реализовать функцию олицетворения пользователя с помощью Identity .Net Core. Я пытаюсь сделать этот ASP.NET Код MVC 4.6 работает в ASP.NET Core, но сталкивается с некоторыми строками кода, которые .NET Core больше не поддерживает.
Итак, ниже приведен исходный код 4.6, который нужно передать userName
и войти в систему как пользователь.
public async Task ImpersonateUserAsync(string userName)
{
var context = HttpContext.Current;
var originalUsername = context.User.Identity.Name;
var impersonatedUser = await userManager.FindByNameAsync(userName);
var impersonatedIdentity = await userManager.CreateIdentityAsync(impersonatedUser, DefaultAuthenticationTypes.ApplicationCookie);
impersonatedIdentity.AddClaim(new Claim("UserImpersonation", "true"));
impersonatedIdentity.AddClaim(new Claim("OriginalUsername", originalUsername));
var authenticationManager = context.GetOwinContext().Authentication;
authenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, impersonatedIdentity);
}
Я дошел до этого, но застрял на context.GetOwinContext().Authentication
части, где мне нужно выйти из системы с текущим файлом cookie и войти в систему с этим новым пользователем.
public async Task<IActionResult> ImpersonateUserAsync(string userName)
{
var originalUsername = _httpContextAccessor.HttpContext.User.Identity.Name;
var impersonatedUser = await _userManager.FindByNameAsync(userName);
var impersonatedIdentity = await _userManager.CreateAsync(impersonatedUser);
await _userManager.AddClaimAsync(impersonatedUser, new Claim("UserImpersonation", "true"));
await _userManager.AddClaimAsync(impersonatedUser, new Claim("OriginalUsername", originalUsername));
return RedirectToAction("Index", "Home");
}
Кто-нибудь делал с таким подходом?
_userManager.AddClaimAsync
добавляет утверждения о выдаче себя за другое лицо в базу данных, а не только в файл cookie? поэтому каждый раз, когда вы входите в систему с этим пользователем, это заявление о выдаче себя за другое лицо будет включаться (если вы не удалите его из БД, когда вы де-олицетворяете) - person trailmax   schedule 30.05.2017SignIn
больше не принимаетvar impersonatedIdentity
.SignIn
теперь можно брать толькоClaimsPrincipal
. Любая идея? - person bbusdriver   schedule 30.05.2017