没有密码的ASP.NET MVC Identity登录

Bjo*_*orn 24 c# asp.net-mvc password-protection

我被赋予修改ASP.NET MVC应用程序的任务,以便冲浪到myurl?username = xxxxxx会自动登录用户xxxxxx,而不需要密码.

我已经非常清楚地表明,对于许多与安全相关的原因和情景来说,这是一个可怕的想法,但负责人是有决心的.该网站不会公开.

那么:有没有办法在没有密码的情况下登录,例如扩展Microsoft.AspNet.Identity.UserManager并修改AccountController?

一些代码:

  var user = await _userManager.FindAsync(model.UserName, model.Password);
                    if (user != null && IsAllowedToLoginIntoTheCurrentSite(user))
                    {
                        user = _genericRepository.LoadById<User>(user.Id);
                        if (user.Active)
                        {
                            await SignInAsync(user, model.RememberMe);
Run Code Online (Sandbox Code Playgroud)

_userManager包含Microsoft.AspNet.Identity.UserManager的实例.

和SignInAsync():

 private async Task SignInAsync(User user, bool isPersistent)
    {
        AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
        var identity = await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
        if (user.UserGroupId.IsSet())
            user.UserGroup = await _userManager.Load<UserGroup>(user.UserGroupId);

        //adding claims here ... //

        AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, new CustomClaimsIdentity(identity));
    }
Run Code Online (Sandbox Code Playgroud)

AuthenticationManager将是OwinSecurity.

hey*_*ega 62

您只需要使用usermanager按名称查找用户.如果您有记录,那么只需签名即可.

    public ActionResult StupidCompanyLogin()
    {

        return View();
    }

    [HttpPost]
    //[ValidateAntiForgeryToken] - Whats the point? F**k security 
    public async Task<ActionResult> StupidCompanyLogin(string name)
    {

        var user = await UserManager.FindByNameAsync(name);

        if (user != null)
        {

            await SignInManager.SignInAsync(user, true, true);
        }

        return View();
    }
Run Code Online (Sandbox Code Playgroud)

  • 很棒的动作名字! (22认同)
  • 这并不像它看起来那样"愚蠢".对于混合模式身份验证,您需要第二个以Windows用户身份登录的网站,并通过表单身份验证以某种方式将其凭据传递给网站.由于使用Windows登录,我们可能只知道一个用户名,我们可以传递此用户名并强行登录只有用户名的用户.添加一些加密并检查呼叫来自何处,或尝试使用第二个Windows Auth应用程序设置的cookie可能有助于提高安全性.所以不是那个"愚蠢的". (9认同)
  • 就我而言,这是一个实现"登录为"功能的问题,管理员可以作为特定用户访问部门的门户.通过实施快速自定义"登录为"密码检查,然后以用户身份登录而无需他们的明确密码,我能够非常轻松地完成此操作而无需深入了解自定义成员资格提供程序(授予,自定义成员资格提供程序本来是从长远来看,这是一个更强大的解决方案 (4认同)
  • 尽管此代码令人不安,但它对于在本地调试中模拟用户(只能锁定到 DEBUG 和 localhost)非常有用,具有完整的 cookie 和所有,以诊断用户特定问题,尤其是控制器级角色权限问题​​。 (2认同)