Benutzer mit den meisten Antworten
Formauthentifizierung automatisch (AD Login) asp mvc

Frage
-
Hallo Zusammen
Ich habe eine Frage zu automatisiertem Login.
Ich habe ein Login, welches mit Formauthentifizierung über das Active Directory anmeldet.
Das Ziel ist es jetzt aber, das im Intranet automatisch mit dem am Computer angemeldete Name "eingeloggt" wird.Sollte das Login nicht passen, soll das Eingabeformular kommen (Manuelle Eingabe)
(So wie zB beim Outlook etc.)Ist sowas überhaupt möglich?
PS. Formauthentifizierung funktioniert problem los (Manuelle Eingabe)
Gruss Osti
Antworten
-
Den kompletten Anmeldenamen inkl. Domain müsstest du über
WindowsIdentity.GetCurrent().Name
erhalten. Ob das immer funktioniert weiß ich nicht, ggf. kannst du auch .NETs AD Schnittstelle dafür nutzen.
Je nachdem wie sicher es werden soll kann das schon reichen. Das Problem welches ich hierbei jedoch sehe ist, dass man die Anmeldung relativ leicht manipulieren kann.
Auch wenn du die Anwendung nicht als Sicherheitskritisch empfindest, spätestens wenn Benutzerbezogene Daten ins Spiel kommen sind sie es.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Osti89 Dienstag, 25. August 2015 14:13
-
So ich habe es jetzt noch gut hingekriegt.
Gemacht habe ich es mit dem UserPrinciple und GroupPrinciple Klasse
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain,"mydomain.local"); UserPrincipal user = new UserPrincipal(domainContext); //Filter user.EmailAddress = string.Format(@"{0}@mydomain.ch", userName); PrincipalSearcher searcher = new PrincipalSearcher(); searcher.QueryFilter = user; PrincipalSearchResult<Principal> results = searcher.FindAll(); if (CheckPermission(results.ToList().First())) { return true; }
und für die Gruppenzugehörigkeit (aufgerufen durch CheckPermission)
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "mydomain.local"); GroupPrincipal group = new GroupPrincipal(domainContext); group.Name = "G_CH_DL_InfoScreen"; PrincipalSearcher searcher = new PrincipalSearcher(); searcher.QueryFilter = group; PrincipalSearchResult<Principal> results = searcher.FindAll(); if (results.ToList().Count == 0) { return false; } if (user.IsMemberOf((GroupPrincipal)results.ToList().First())) { return true; }
Im erstenteil schaue ich, ob es den Benutzer gibt.
Im zweiten Teil, frage ich ab ob dieser zu einer bestimmten Gruppe gehört.
Alle Antworten
-
Hallo,
also den Benutzernamen kannst du von deinem Programm aus noch auslesen, beim Passwort funktioniert das aber nicht mehr. Die Environment.UserName-Eigenschaft hält den Benutzernamen bereit. Das müsstest du also mindestens einmal abfragen, wobei es eventuell eine Sicherheitslücke darstellt es abzuspeichern.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo Tom
Vielen Dank für deine Antwort.
Kann man auch die Domäne des Users auslesen?
Dann könnte ich die Domäne vergleichen, den Benutzernamen abfragen (ob er existiert) und ob er zu einer bestimmten Gruppe angehört. Dann bräuchte ich das Passwort nicht, oder?Sicherheitstechnisch ist es nicht so relevant, weil das ganze nur im Intranet stattfindet und die Webapplikation keine kritische Daten handhabt.
-
Den kompletten Anmeldenamen inkl. Domain müsstest du über
WindowsIdentity.GetCurrent().Name
erhalten. Ob das immer funktioniert weiß ich nicht, ggf. kannst du auch .NETs AD Schnittstelle dafür nutzen.
Je nachdem wie sicher es werden soll kann das schon reichen. Das Problem welches ich hierbei jedoch sehe ist, dass man die Anmeldung relativ leicht manipulieren kann.
Auch wenn du die Anwendung nicht als Sicherheitskritisch empfindest, spätestens wenn Benutzerbezogene Daten ins Spiel kommen sind sie es.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Osti89 Dienstag, 25. August 2015 14:13
-
Also das auslesen funktioniert wunderbar. Ich möchte jetzt im AD nachfragen ob es diesen User gibt.
private MembershipUser ValidateUser(string userName) { int matches = 0; var users = Membership.FindUsersByName(userName, 0, 1, out matches); if (matches == 1) { return users[userName]; } return null; }
bei FindUsersByName, kommt eine NotSupportet exception(The Active Directory membership provider has not been configured to support search methods.)
Was wäre den die .net AD Schnittstelle? Also Namespace?
-
So ich habe es jetzt noch gut hingekriegt.
Gemacht habe ich es mit dem UserPrinciple und GroupPrinciple Klasse
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain,"mydomain.local"); UserPrincipal user = new UserPrincipal(domainContext); //Filter user.EmailAddress = string.Format(@"{0}@mydomain.ch", userName); PrincipalSearcher searcher = new PrincipalSearcher(); searcher.QueryFilter = user; PrincipalSearchResult<Principal> results = searcher.FindAll(); if (CheckPermission(results.ToList().First())) { return true; }
und für die Gruppenzugehörigkeit (aufgerufen durch CheckPermission)
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "mydomain.local"); GroupPrincipal group = new GroupPrincipal(domainContext); group.Name = "G_CH_DL_InfoScreen"; PrincipalSearcher searcher = new PrincipalSearcher(); searcher.QueryFilter = group; PrincipalSearchResult<Principal> results = searcher.FindAll(); if (results.ToList().Count == 0) { return false; } if (user.IsMemberOf((GroupPrincipal)results.ToList().First())) { return true; }
Im erstenteil schaue ich, ob es den Benutzer gibt.
Im zweiten Teil, frage ich ab ob dieser zu einer bestimmten Gruppe gehört.