から取られたスクリーンショット私は、次のコードでそれを解決しました。 AccountControllerで
:
[Authorize(Roles="Administrators")]
public async Task<IActionResult> ImpersonateUser(string id)
{
var appUser = await _userManager.FindByIdAsync(id);
var userPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser);
userPrincipal.Identities.First().AddClaim(new Claim("OriginalUserId", User.FindFirst(x=>x.Type == ClaimTypes.NameIdentifier).Value));
await _signInManager.SignOutAsync(); //sign out the current user
//https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/IdentityCookieOptions.cs
await HttpContext.Authentication.SignInAsync("Identity.Application", userPrincipal); //impersonate the new user
return RedirectToAction("Index", "Home");
}
public async Task<IActionResult> StopImpersonation()
{
var originalUserId = User.Claims.First(x => x.Type == "OriginalUserId").Value;
var appUser = await _userManager.FindByIdAsync(originalUserId);
await _signInManager.SignInAsync(appUser, false);
return RedirectToAction("Index", "Home");
}
基本的にこれが偽装ユーザーに請求OriginalUserId
を追加します。この申し立てが存在するかどうかを確認することで、現在私が偽装していることを知り、StopImpersonation
のコードを使用して元のアカウントに戻ることができます。
認証方式Identity.Application
がデフォルトです。
これがCoreで動作するかどうかはわかりませんが、これはID v2でどのように行ったのですか。http://tech.trailmax.info/2014/06/user-impersonation-with-asp-net-identity- 2 /私はコアの原則は大規模に変更されていないと確信しています – trailmax
@ trailmaxありがとうございます。これは正しい方向だった(私の答えを参照) – Jetro223