po wielu poszukiwaniach i przeglądaniu kilku rozwiązań dotyczących zarządzania uwierzytelnianiem w trybie mieszanym w aplikacjach ASP.NET nadal nie mam odpowiedniego rozwiązania dla mojego problemu.Rozszerzanie uwierzytelniania systemu Windows w aplikacji ASP.NET MVC 3
Muszę zaimplementować aplikację intranetową dla kilku różnych grup użytkowników. Do tej pory korzystałem z uwierzytelniania systemu Windows, które było bardzo proste w implementacji. Moje problemy pojawiają się, gdy chodzi o autoryzowanie grup użytkowników dla specjalnych funkcji aplikacji.
Korzystanie z działa świetnie, ale z tego powodu nie mam dostępu do zarządzania katalogiem aktywnym, niemożliwe jest skonfigurowanie zarządzania rolą w sposób, w jaki jest to potrzebne dla mojej aplikacji.
Co chcę zrobić, to zdefiniować niestandardowe role i członkostwa oprócz tych, które są zdefiniowane w aktywnym katalogu (czy takie rozszerzenie jest możliwe? Np. Poprzez wdrożenie własnego programu dostarczania członkostwa?).
Co według Ciebie jest najlepszym rozwiązaniem dla mojego problemu. Czy naprawdę muszę wdrożyć złożone uwierzytelnianie w trybie mieszanym z uwierzytelnianiem formularzy oprócz uwierzytelniania systemu Windows?
Używane technologie:
- MS SQL Server 2008
- MS VS 2010
- ASP.NET MVC 3 - Razor Zobacz silnika
- Telerik Rozszerzenia dla ASP.NET MVC
- IIS 7 w systemie Windows Server 2008:
E DIT (roztwór końcowe dzięki pomocy dougajmcdonald):
Po wskazaniu mi użyć niestandardowego wdrożenia IPrincipal Znalazłem kilka rozwiązań here i here. Wprowadzenie wszystko razem doszedłem do następującego rozwiązania:
1.Create implementacja zwyczaj główny:
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 mój zwyczaj wdrożenie główny do aplikacji poprzez rozszerzenie „Global.asax.cs” plik :
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 moich własnych ról zezwolenia w mojej aplikacji
public class HomeController : Controller
{
[Authorize(Roles= "someTestRole")]
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
Działa !!! Tak!
Dam to spróbuj, dzięki za szybką odpowiedź :) –
oh dziękuję bardzo !!! Twoja odpowiedź była bardzo pomocna! :-) –
Nie ma problemu, cieszę się, że pomogło. Bardzo niedawno musiałem zrobić coś bardzo podobnego! W mojej sytuacji nie chciałem korzystać z ról Windows Active Directory (ponieważ nasi administratorzy nie chcą zarządzać rzeczami w ten sposób), ale chciałem upewnić się, że MOŻEMY ich użyć, jeśli zdecydują się na nie, stąd decyzja o połączeniu z IPrincipal strona rzeczy, a nie tylko tworzenie konta użytkownika jako klasy wewnętrznej dla naszej aplikacji i przyklejanie ról przeciwko niej. – dougajmcdonald