gpt4 book ai didi

c# - ASP.NET MVC 5 成员身份模拟特定用户

转载 作者:太空狗 更新时间:2023-10-29 17:49:22 25 4
gpt4 key购买 nike

有很多关于在 c# 中模拟用户的示例,但问题是您必须提供该用户的域、用户名和密码。

我需要的有点不同。如果我们使用成员资格在 ASP.NET MVC 5 中构建应用程序,假设我们具有以下角色:

  • 管理员
  • 用户
  • 访客

以及属于不同角色的用户。

现在,如果 User 角色的用户对应用程序有一些问题,我如何允许 Admin 角色的用户在没有特定用户的情况下模拟该特定用户向管理员提供他的用户名和密码?

最主要的是 Admin 应该能够模拟应用程序中的任何用户,并且能够以用户本人的身份浏览应用程序。

这在MVC中有可能实现吗?

有许多应用程序可以提供这种可能性,Salesforce 就是其中之一。 Salesforce 中的管理员可以模拟任何用户,并以用户本人的身份浏览/查看应用程序。这将使他们能够识别并解决应用程序中可能存在的问题。

最佳答案

Now if a user from role User has some issues with the application, how can I allow a user from Admin role to impersonate that specific user, without that specific user to give the Admin his username and password? ...Is this possible to achieve in MVC?

这可以在不知道要模拟的用户的密码的情况下完成,但您必须知道要模拟的用户的用户名。

您可以使用正常的表单例份验证通过以下方式执行此操作:

FormsAuthentication.SetAuthCookie("username-to-be-impersonated", false);

当然,您会希望保护此代码块的入口,以便只有管理员才能进行模拟。您可能想要做一些其他事情,例如将管理员用户的用户名保存在 session 或 cookie 中,以帮助系统知道模拟正在进行中,并让用户能够在完成模拟后撤消它。

最重要的是,成员(member)系统只关心 auth cookie,您可以在不知道用户密码的情况下为任何用户名编写 auth cookie。

ASP.NET Identity 2 的过程相同,不同之处在于您编写身份验证 cookie 的方式。请注意下面的代码是 a snippet based on the comment that @trailmax left in the OP :

// assume you already have references to a UserManager and HttpContext
var userToImpersonate = await userManager
.FindByNameAsync(userNameToImpersonate);
var identityToImpersonate = await userManager
.CreateIdentityAsync(userToImpersonate,
DefaultAuthenticationTypes.ApplicationCookie);
var authenticationManager = httpContext.GetOwinContext().Authentication;
authenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties()
{
IsPersistent = false
}, identityToImpersonate);

您还应该制定一项政策,允许您在让管理员冒充他们的帐户之前以某种方式获得用户的许可。

关于c# - ASP.NET MVC 5 成员身份模拟特定用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28381411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com