のは、私は次のような役割を持っているとしましょう:ASP.NETコアアイデンティティ特定のユーザーを偽装
管理
ユーザー
私は管理者の役割が持つ特定のユーザーアカウントを偽装したいです特定のユーザーアカウントのパスワードを知らないユーザーの役割。
管理者は、アプリケーションからすべてのユーザーを偽装し、ユーザー自身としてアプリケーションを参照できるようにする必要があります。 I found a linkこれは実際にはASP.NET MVC 4.6で実装されていますが、これをコアバージョンに変換する際に少し頭痛があります。主な理由は、.NETのコアでSignIn
パラメータがIdentityResult
クラス(impersonatedIdentityは)もう渡すことを許可していませんリンク
authenticationManager.SignIn(new AuthenticationProperties()
{ IsPersistent = false }, impersonatedIdentity);
内のコードの最後の行の
。現在はClaimsPrincipal
しか使用できません。
それでは、私がやってしまったことはこれだった、
public async Task<IActionResult> ImpersonateUserAsync(string userName)
{
var impersonatedUser = await _userManager.FindByNameAsync(userName);
var claims = new List<Claim> {
new Claim(ClaimTypes.Name, impersonatedUser.FirstName, ClaimValueTypes.String),
new Claim(ClaimTypes.Surname, impersonatedUser.LastName, ClaimValueTypes.String),
new Claim(ClaimTypes.Email, impersonatedUser.Email, ClaimValueTypes.String)
};
var user = new ClaimsPrincipal(new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme));
var authenticationManager = _httpContextAccessor.HttpContext.Authentication;
await authenticationManager.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
await authenticationManager.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user, new AuthenticationProperties() { IsPersistent = false });
return RedirectToAction("Index", "Home");
}
私は必要な主張を埋めのでSignInAsync
は今var user
を取ることができClaimsPrincipal
にそれを渡されました。 しかし、これは、以前は管理者ロールによって割り当てられたロールと特権を持つテーブルAspNetUsers
にあるユーザーとして実際にログインしていないようです。正に言えば、上記のコードが少なくともvar claims
で定義した名前と姓のようにサインインすることを期待していましたが、実際にはインデックスページにリダイレクトされた後でも管理者アカウントとしてログインしています。
AspNetUsers
テーブルに定義されているユーザーアカウントにサインインするために必要な適切な手順は何ですか。管理者はユーザー自身でアプリケーションを閲覧できますか?
まず、この種の機能の実装には特に注意が必要です。これは、特にクレジットカード情報や健康情報を取り扱う場合、法的責任を問われる可能性があるためです。次に、ユーザーが偽装されたことを示す監査機能を提供する必要があります。そのため、ユーザーが何かを行った偽装ユーザーの実際のユーザーであることが証明できます。 –
あなたのアドバイスをありがとうが、私たちはすでにクライアントと契約を結んでいたので、心配しないでください。ここで問題を解決するためのアイデアやアプローチはありますか? – pavilion
解決策を試したことがありますか?https://stackoverflow.com/a/42059249/61164 - AuthenticationManagerではなくSigninManagerを使用しています。 –