如何使用ASP.NET Identity 2.0允许用户模拟另一个用户?

Trailmax

我正在将ASP.NET MVC 5.1应用程序从MembershipProvider迁移到ASP.NET Identity v2.0。我在应用程序中拥有的功能之一是用户模拟:管理员可以像在该站点上注册的任何其他用户一样登录,而无需知道密码。

我使用此代码为MembershipProvider实现了用户模拟,但不适用于身份库。

如何在ASP.NET Identity中实现用户模拟(不是IIS模拟)?

Trailmax

我已经找到了解决这个问题的方法。

基本上,我添加了具有管理员用户名的声明,如果该声明存在,我知道正在模拟。当管理员想要停止模拟时,系统会为声明检索原始用户名,删除旧的模拟Cookie并为管理员创建新的Cookie:

[AuthenticateAdmin] // <- make sure this endpoint is only available to admins
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);
}

有关更多信息,请参见我的博客文章:使用ASP.Net Identity 2模拟用户

Asp.Net Core中的用户模拟

2017年7月更新:该主题非常受欢迎,因此我研究了Core中的用户模拟,并且更新的API的原理非常相似。冒充的方法如下:

    [Authorize(Roles = "Admin")] // <-- Make sure only admins can access this 
    public async Task<IActionResult> ImpersonateUser(String userId)
    {
        var currentUserId = User.GetUserId();

        var impersonatedUser = await _userManager.FindByIdAsync(userId);

        var userPrincipal = await _signInManager.CreateUserPrincipalAsync(impersonatedUser);

        userPrincipal.Identities.First().AddClaim(new Claim("OriginalUserId", currentUserId));
        userPrincipal.Identities.First().AddClaim(new Claim("IsImpersonating", "true"));

        // sign out the current user
        await _signInManager.SignOutAsync();

        // If you use asp.net core 1.0
        await HttpContext.Authentication.SignInAsync(cookieOptions.ApplicationCookieAuthenticationScheme, userPrincipal);
        // If you use asp.net core 2.0 (the line above is deprecated)
        await HttpContext.SignInAsync(cookieOptions.ApplicationCookieAuthenticationScheme, userPrincipal);

        return RedirectToAction("Index", "Home");
    }

这是停止模拟的方法:

    [Authorize(Roles = "Admin")] // <-- Make sure only admins can access this 
    public async Task<IActionResult> StopImpersonation()
    {
        if (!User.IsImpersonating())
        {
            throw new Exception("You are not impersonating now. Can't stop impersonation");
        }

        var originalUserId = User.FindFirst("OriginalUserId").Value;

        var originalUser = await _userManager.FindByIdAsync(originalUserId);

        await _signInManager.SignOutAsync();

        await _signInManager.SignInAsync(originalUser, isPersistent: true);

        return RedirectToAction("Index", "Home");
    }

我的博客中有完整说明:http : //tech.trailmax.info/2017/07/user-impersonation-in-asp-net-core/ GitHub上的完整代码示例:https : //github.com/trailmax/AspNetCoreImpersonation

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.net Identity 2.0注销另一个用户

来自分类Dev

ASP.NET Identity2-如何使用AllowAnonymous Controller获取用户ID?

来自分类Dev

ASP.Net Identity 2 RemovePassword模拟

来自分类Dev

ASP.Net Identity 2 RemovePassword模拟

来自分类Dev

使用 ASP.Net Identity 时如何获取 AD 用户

来自分类Dev

ASP.NET Identity 2记住我-用户正在注销

来自分类Dev

ASP.NET Identity,立即将另一个用户添加到角色中(不必注销并再次登录)

来自分类Dev

使用Asp.Net Identity 2将用户添加到角色后,如何使.AspNet.ApplicationCookie无效?

来自分类Dev

如何自定义Asp.net Identity 2用户名已采取的验证消息?

来自分类Dev

是什么为使用ASP.NET Identity 2的用户生成int主键的值的?

来自分类Dev

使用Asp.Net Identity 2将用户信息存储在AspNetUserClaims中有什么好处?

来自分类Dev

Asp.net Identity 2帐户一次输入

来自分类Dev

如何为具有ASP.NET Identity 2的用户添加用户电子邮件地址

来自分类Dev

如何为具有ASP.NET Identity 2的用户添加用户电子邮件地址

来自分类Dev

如何使用AspNet.Identity使用Asp.Net RTM位创建用户?

来自分类Dev

ASP.Net Identity不创建用户

来自分类Dev

ASP.NET Identity用户创建

来自分类Dev

如何使用ASP.NET Identity设置Thinktecture Identity Server v3 beta 1-2?

来自分类Dev

使用ASP.NET Identity v2的Thinktecture Identity Server v2

来自分类Dev

如何在ASP.NET Identity 2中使用TPH(每个层次结构的表)

来自分类Dev

使用ASP.NET Identity 2进行身份验证时,如何获得返回的User对象?

来自分类Dev

如何使用Identity ASP.NET Core通过代码优先迁移为用户和角色播种

来自分类Dev

如何创建用户并使用ASP.NET Identity获得新创建的ID

来自分类Dev

如何使用ASP.NET Identity 2.0.1将角色更改强制传播给用户?

来自分类Dev

如何使用ASP.NET Identity实施多租户用户登录

来自分类Dev

如何使用 ASP.NET Core、Identity Framework 和 Entity Framework 显示特定用户创建的内容

来自分类Dev

ASP.NET Identity 2电子邮件和用户名的分隔,并使用电子邮件登录

来自分类Dev

使用ASP.Net Identity 2创建新用户时,会将新行插入到父表中

来自分类Dev

从ASP.NET Identity 2.x中的角色中删除用户

Related 相关文章

  1. 1

    ASP.net Identity 2.0注销另一个用户

  2. 2

    ASP.NET Identity2-如何使用AllowAnonymous Controller获取用户ID?

  3. 3

    ASP.Net Identity 2 RemovePassword模拟

  4. 4

    ASP.Net Identity 2 RemovePassword模拟

  5. 5

    使用 ASP.Net Identity 时如何获取 AD 用户

  6. 6

    ASP.NET Identity 2记住我-用户正在注销

  7. 7

    ASP.NET Identity,立即将另一个用户添加到角色中(不必注销并再次登录)

  8. 8

    使用Asp.Net Identity 2将用户添加到角色后,如何使.AspNet.ApplicationCookie无效?

  9. 9

    如何自定义Asp.net Identity 2用户名已采取的验证消息?

  10. 10

    是什么为使用ASP.NET Identity 2的用户生成int主键的值的?

  11. 11

    使用Asp.Net Identity 2将用户信息存储在AspNetUserClaims中有什么好处?

  12. 12

    Asp.net Identity 2帐户一次输入

  13. 13

    如何为具有ASP.NET Identity 2的用户添加用户电子邮件地址

  14. 14

    如何为具有ASP.NET Identity 2的用户添加用户电子邮件地址

  15. 15

    如何使用AspNet.Identity使用Asp.Net RTM位创建用户?

  16. 16

    ASP.Net Identity不创建用户

  17. 17

    ASP.NET Identity用户创建

  18. 18

    如何使用ASP.NET Identity设置Thinktecture Identity Server v3 beta 1-2?

  19. 19

    使用ASP.NET Identity v2的Thinktecture Identity Server v2

  20. 20

    如何在ASP.NET Identity 2中使用TPH(每个层次结构的表)

  21. 21

    使用ASP.NET Identity 2进行身份验证时,如何获得返回的User对象?

  22. 22

    如何使用Identity ASP.NET Core通过代码优先迁移为用户和角色播种

  23. 23

    如何创建用户并使用ASP.NET Identity获得新创建的ID

  24. 24

    如何使用ASP.NET Identity 2.0.1将角色更改强制传播给用户?

  25. 25

    如何使用ASP.NET Identity实施多租户用户登录

  26. 26

    如何使用 ASP.NET Core、Identity Framework 和 Entity Framework 显示特定用户创建的内容

  27. 27

    ASP.NET Identity 2电子邮件和用户名的分隔,并使用电子邮件登录

  28. 28

    使用ASP.Net Identity 2创建新用户时,会将新行插入到父表中

  29. 29

    从ASP.NET Identity 2.x中的角色中删除用户

热门标签

归档