2016-02-17 16 views
14

Tôi đang cố tạo ứng dụng asp.net core mvc 6 bằng xác thực Cookie Middleware. Mã của tôi biên dịch mà không có lỗi, nhưng ngay cả sau khi đăng nhập thành công tôi không được phép sử dụngAsp.Net MVC 6 Xác thực cookie - Cấp phép không thành công

Dưới đây là startup.cs của tôi cấu hình

 app.UseCookieAuthentication(options => 
     { 
      options.AuthenticationScheme = "CookieAuth"; 
      options.LoginPath = new PathString("/Account/Login/"); 
      options.AccessDeniedPath = new PathString("/Account/Login/"); 
      options.AutomaticAuthenticate = true; 
      options.AutomaticChallenge = true; 

     }); 

Cũng đăng nhập hành động trong bộ điều khiển của tôi:

public async Task<IActionResult> Login(LoginViewModel model) 
    { 

     User foundUser = _userManager.findUser(model.UserName, model.Password); 


     if (foundUser != null) 
     { 
      List<Claim> userClaims = new List<Claim> 
      { 
       new Claim("userId", Convert.ToString(foundUser.UserID)), 
       new Claim(ClaimTypes.Name, foundUser.UserName), 
       new Claim(ClaimTypes.Role, Convert.ToString(foundUser.RoleID)) 
      }; 

      ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims)); 
      await HttpContext.Authentication.SignInAsync("CookieAuth", principal); 


      return RedirectToAction("Index", "Dashboard"); 
     } 
     return View(); 
    } 

Và cuối cùng là hành động Bảng điều khiển/Chỉ mục

[Authorize] 
public IActionResult Index() 
{ 
    return View(); 
} 

Tôi đặt một số breakpoi nts trong hành động đăng nhập và mọi thứ dường như hoạt động tốt. Cookie cũng được đặt chính xác.

Và bây giờ tôi không biết cách tôi không thể đi đến bảng điều khiển/index sau khi đăng nhập. Mỗi lần tôi đang chuyển hướng đến/tài khoản/Đăng nhập/do thiết lập cấu hình

Tôi đang làm gì sai rồi ?

Trả lời

17

Khi bạn xây dựng ClaimsIdentity trong thông tin đăng nhập của mình, bạn cần sử dụng một hàm tạo khác chỉ định authenticationType.

Thay vì

ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims)); 

Bạn nên làm:

ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(userClaims, "local")); 

Nó bây giờ có thể tạo ra một ClaimsIdentity có khiếu nại, nhưng đã IsAuthenticated thiết lập là false. Trên thực tế đây là mặc định bây giờ ...

Để có IsAuthenticated thiết lập là true, bạn cần phải xác định một kiểu xác thực

Tôi đã nhận thông tin này từ Dominick Baier của blog here.

Ngoài ra còn có một ví dụ tuyệt vời về việc sử dụng phần mềm trung gian cookie here, cũng bởi (huyền thoại) Dominick Baier/minimumprivilege.

EDIT:

This answer chứa nhiều thông tin về những gì nên được sử dụng cho các authenticationType chuỗi.

+2

Cảm ơn bạn rất nhiều! Beacause của một param tôi bị mất 2h của cuộc sống của tôi: ( – Kuba

+1

Cũng xứng đáng lên bầu, cảm ơn bạn cho câu trả lời! Hơn 2 giờ bị mất, nhưng ít nhất tôi biết lý do tại sao –

+1

Đã dành 4 giờ về điều này. cho tham số 'authenticationType' có phải là" Cookie "," JWT "hoặc lược đồ được sử dụng hay bất cứ điều gì? – Omar

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