Ngữ nghĩa dự định cho nhiều bộ lọc xác thực là gì? Điều đó được cho phép? và nếu có, làm thế nào để họ làm việc cùng nhau?Bộ điều khiển ASP.net Web API 2 với nhiều bộ lọc xác thực
Dưới đây là ví dụ cụ thể. Giả sử tôi có một lớp điều khiển như
[BasicAuthenticator]
[LocalAuthenticator]
[Authorize]
public class TestController : ApiController
{
[AllowAnonymous]
public IHttpActionResult GetProduct(int id)
{
}
// etc. etc
}
trong đó BasicAuthenticator và LocalAuthenticator thực hiện IAuthenticationFilter.
Mỗi trình xác thực sẽ có cơ hội thành công. Nếu một trong hai thành công, nó sẽ đặt context.Principal
thành một đối tượng mới với ClaimsIdentity thích hợp (tên, loại và isAuthenticated = true).
Điều gì sẽ xảy ra nếu trình xác thực không thành công? Tôi nghĩ nó không nên làm gì cả, để người khác sẽ có cơ hội thành công. Đúng?
Và điều gì sẽ xảy ra nếu cả hai thành công? Có bất kỳ điều gì xảy ra lần thứ hai để xóa Hiệu trưởng do người đầu tiên tạo ra không? Nó sẽ không có ý nghĩa hơn để hợp nhất các bộ sưu tập ClaimsIdentity của hai đối tượng chính với nhau?
Nếu trình xác thực không thành công, bạn không nên làm gì, đúng không? Bởi vì người xác thực khác có thể thành công. Ngữ nghĩa của việc có hai người xác thực là hành động sẽ chạy nếu một trong hai thành công, đúng không?
Tôi nghĩ rằng lớp ủy quyền sẽ xem xét tất cả các ClaimsIdentity trong hiệu trưởng, và nếu bất kỳ ClaimsIdentity có "isAuthenticated = true" thì nó sẽ cho phép hành động điều khiển chạy. Nếu không, nó sẽ thiết lập trạng thái = 401. Điều đó có vẻ là cách nó hoạt động. Điều đó đúng không?
Mục đích của [AllowAnonymous]
là tắt tất cả các bộ lọc ủy quyền khác, đúng không? Bộ điều khiển (hoặc phương thức hành động) được trang trí với [AllowAnonymous]
sau đó tôi giả sử rằng nó sẽ luôn chạy, ngay cả khi việc xác thực thất bại. Đúng không?
Mô hình xác thực giống như "một danh tính cho mỗi phương thức xác thực". ClaimsPrincipal có thể được sử dụng để truy vấn nhiều cá thể ClaimsIdentity cơ bản của nó. Bạn đã thử từng bộ lọc của mình chỉ cần thêm một nhận dạng mới cho hiệu trưởng hiện tại, thay vì xây dựng một hiệu trưởng mới? – tuespetre