sau rất nhiều giải pháp và đọc một số giải pháp về cách quản lý xác thực chế độ hỗn hợp trong ứng dụng ASP.NET, tôi vẫn chưa có giải pháp phù hợp cho vấn đề của mình.Mở rộng xác thực Windows trong ứng dụng ASP.NET MVC 3
Tôi phải triển khai ứng dụng mạng nội bộ cho một nhóm người dùng khác nhau. Cho đến bây giờ tôi đã sử dụng authenthication windows rất đơn giản để thực hiện. Vấn đề của tôi nảy sinh khi nói đến việc ủy quyền cho các nhóm người dùng cho các chức năng ứng dụng đặc biệt.
Sử dụng [Authorize(Users = "DOMAIN\\USER")]
hoạt động tuyệt vời nhưng do tôi không có quyền truy cập vào quản lý thư mục hoạt động, tôi không thể định cấu hình quản lý theo cách tôi cần cho ứng dụng của mình.
Điều tôi muốn làm là xác định vai trò tùy chỉnh và tư cách thành viên ngoài các vai trò được xác định trong thư mục hoạt động (có thể là tiện ích mở rộng như vậy không? Ví dụ: bằng cách triển khai memberhipprovider riêng?).
Bạn nghĩ gì là giải pháp tốt nhất cho vấn đề của tôi. Tôi có thực sự phải triển khai xác thực chế độ hỗn hợp phức tạp với xác thực biểu mẫu ngoài xác thực cửa sổ không?
Technologies đã qua sử dụng:
- MS SQL Server 2008
- MS VS 2010
- ASP.NET MVC 3 - Razor View Engine
- Telerik Extensions cho ASP.NET MVC
- IIS 7 trên Windows Server 2008
E DIT (giải pháp cuối cùng nhờ sự giúp đỡ của dougajmcdonald):
Sau khi chỉ cho tôi sử dụng triển khai IPrincipal tùy chỉnh Tôi đã tìm thấy một số giải pháp here và here. Đưa tất cả mọi thứ cùng tôi đến các giải pháp sau đây:
1.Create một thực hiện tùy chỉnh chủ yếu:
public class MyPrincipal: WindowsPrincipal
{
List<string> _roles;
public MyPrincipal(WindowsIdentity identity) : base(identity) {
// fill roles with a sample string just to test if it works
_roles = new List<string>{"someTestRole"};
// TODO: Get roles for the identity out of a custom DB table
}
public override bool IsInRole(string role)
{
if (base.IsInRole(role) || _roles.Contains(role))
{
return true;
}
else
{
return false;
}
}
}
2.Integrate tôi thực hiện chủ yếu tùy vào ứng dụng thông qua việc mở rộng "Global.asax.cs" tập tin :
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (Request.IsAuthenticated)
{
WindowsIdentity wi = (WindowsIdentity)HttpContext.Current.User.Identity;
MyPrincipal mp = new MyPrincipal(wi);
HttpContext.Current.User = mp;
}
}
3.Use vai trò tùy chỉnh của tôi cho phép trong ứng dụng của tôi
public class HomeController : Controller
{
[Authorize(Roles= "someTestRole")]
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
Nó hoạt động !!! vâng!
tôi sẽ cung cấp cho nó một thử, cảm ơn cho phản ứng nhanh :) –
oh cảm ơn bạn rất nhiều !!! Câu trả lời của bạn rất hữu ích! :-) –
Không có vấn đề, vui vì nó đã giúp. Tôi đã phải làm một cái gì đó rất giống nhau rất gần đây! Trong trường hợp của tôi, tôi không muốn sử dụng các vai trò Windows Active Directory (vì các quản trị viên của chúng tôi không muốn quản lý mọi thứ theo cách đó) nhưng tôi muốn đảm bảo chúng tôi có thể sử dụng chúng nếu họ quyết định, vì vậy quyết định liên kết với IPrincipal bên cạnh những thứ thay vì chỉ tạo tài khoản người dùng như một lớp bên trong ứng dụng của chúng ta và gắn bó với vai trò của nó. – dougajmcdonald