2015-01-23 23 views
14

Tôi đã được giao nhiệm vụ sửa đổi ứng dụng ASP.NET MVC theo cách lướt web đến myurl? Username = xxxxxx sẽ tự động đăng nhập vào xxxxxx của người dùng mà không yêu cầu mật khẩu.Đăng nhập nhận dạng ASP.NET MVC không có mật khẩu

Tôi đã làm cho nó rất rõ ràng rằng đây là một ý tưởng khủng khiếp đối với nhiều lý do bảo mật liên quan và các kịch bản, nhưng những người phụ trách được xác định. Trang web sẽ không được công khai.

Vì vậy: có cách nào để đăng nhập mà không cần mật khẩu bằng cách mở rộng Microsoft.AspNet.Identity.UserManager và sửa đổi AccountController không?

Một số mã:

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); 

_userManager giữ một thể hiện của một Microsoft.AspNet.Identity.UserManager.

và 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)); 
    } 

AuthenticationManager sẽ OwinSecurity.

+0

Hiện chúng tôi đang 'login' bạn :) –

+1

... và tất nhiên không có công ty bao giờ có vấn đề với các mối đe dọa trong cuộc * ho * Snowden * ho *. Đối với câu hỏi của bạn, có nó dễ dàng. Làm mọi thứ kém an toàn hơn bao giờ hết. Tôi muốn bị cám dỗ để đặt mật khẩu của mọi người thành một chuỗi rỗng và sử dụng nó một cách ngầm định (nhanh chóng 'bẩn nhưng nó sẽ hoạt động và cũng làm cho điểm bảo mật của bạn vô giá trị cùng một lúc). Nếu bạn muốn làm điều đó "đúng", bạn có thể phân lớp các nhà cung cấp auth – Basic

+0

@AndyRefuerzo: Tôi đã thêm mã có liên quan. – Bjorn

Trả lời

36

Bạn chỉ cần sử dụng usermanager để tìm người dùng theo tên. Nếu bạn có một kỷ lục sau đó chỉ cần đăng chúng trong.

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(); 
    } 
+16

Tên hành động tuyệt vời! –

+0

Nó thực sự làm việc, tôi nghĩ rằng đây sẽ là một rắc rối. Cảm ơn vì đã giúp người mới bắt đầu. Vì lý do nào đó, tôi không vui khi đào lỗ hổng bảo mật này. – Bjorn

+0

Không sao cả - Chỉ cần chắc chắn rằng bạn che lưng mình tại nơi làm việc! – heymega

Các vấn đề liên quan