Asp.Net MVC 4 Benutzer authentifiziert ist, auch wenn Sie nicht autorisierte
Arbeite ich in meinem ersten MVC-Projekt und ich habe Probleme mit der Authentifizierung.
Ich habe eine login-Seite korrekt validiert die Benutzer von meinem active directory. Aber, auch authentifiziert, nicht alle Benutzer sind berechtigt, auf das system zuzugreifen, so dass ich einen Abschnitt in web.config um zu überprüfen, ob der Benutzer Berechtigungen haben. So etwas wie:
<authorization>
<allow users="john,mary,paul,bill,jane,anna" />
<deny users="*" />
</authorization>
Es funktioniert gut und die Anwender immer umgeleitet auf login, wenn keine Berechtigung.
ABER, wenn ich überprüfen, ob der Benutzer Authentifiziert ist, ist das Ergebnis immer true. Und, in einer login-Seite möchte ich prüfen, ob ich zeigen muss, eine Nachricht an angemeldete UND berechtigte Benutzer. So etwas wie:
@if (User.Identity.IsAuthenticated && User.Identity.IsAuthorized)
{
@Html.Partial("_Menu");
}
So... Wie ich es tun?
InformationsquelleAutor robsonrosa | 2013-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Authentifizierung eine Autorisierung sind 2 unterschiedliche Konzepte. Authentifizierung bedeutet, dass Sie wissen, wer die person ist. Autorisierung bedeutet, dass Sie bestimmte Berechtigungen.
Wenn Sie möchten, um zu überprüfen, ob Sie berechtigt sind, eine bestimmte Aktion ausführen und geben Sie eine Schaltfläche oder einen link zur Ausführung der Aktion (oder den Zugriff auf einige Daten, was auch immer es sein mag), dann haben Sie, um zu überprüfen, ob Sie die Berechtigungen haben, mit anderen Mitteln. Einige weitere Einzelheiten über das setup, die Sie haben würde helfen, die Frage zu beantworten besser.
MembershipProvider
Muster fehlschlägt, beachten Sie den Unterschied.Warum sollte es? Die Mitgliedschaft kümmert sich nur um die Authentifizierung. Verwenden Sie Rollen oder Attributen oder web.config für die Zulassung.
Benutzer.Identität.IsAuthorized nicht existiert
das ist sicher genug. Wenn die Genehmigung versagt hatte, es würde umgeleitet haben, es liest ungeschickt, wie es geschrieben ist.
Zuordnen der Benutzer zu Rollen, und verwenden Sie die
User.IsInRole
Funktion.InformationsquelleAutor Nick Larsen
Zur Authentifizierung, überprüfen Sie auf Ihrer Website.config wenn Sie an diesem tag:
Und in Ihrem LoginMethod, dass die Authentifizierung der Benutzer, stellen Sie sicher, dass Sie angerufen .NETTO-Methode, die den Benutzer zu authentifizieren, die auf seine Identität, z.B.:
Es ist ein AuthorizeAttribute im System.Web.Mvc, die verwendet werden können, die mit Ihren Handlungen oder Steuerungen, wie:
oder
Diese AuthorizeAttribute wird überprüft, ob der aktuelle Benutzer Berechtigt ist. Sie können erstellen Sie Ihre eigene Attribut nur Erben der AuthorizeAttribute und überschreiben OnAuthorization und AuthorizeCore
Ich aktualisiert meine Antwort mit einem Attribut, können Sie überprüfen dieses für Sie.
Für mehr info über die AuthorizeAttribute
danke, aber ich würde den test manuell. der Anwender."IsInRole" - vorschlagen von NickLarsen appers um das problem zu lösen. danke!
InformationsquelleAutor TiagoBrenck
Sobald Sie eine erfolgreiche Anmeldung (
FormsAuthentication.SetAuthCookie
), Ihre Benutzer-Authentifizierung Durchlaufen also, bis Sie nicht explizit Abmelden (FormsAuthentication.SignOut
) das ist das korrekte Verhalten, wie gesagt, die Authentifizierung und Autorisierung sind zwei verschiedene Dinge.Ich denke, Sie wollen zeigen, ein Menü nur für Benutzer, die authentifiziert wurden durch AD, in diesem Fall können Sie einfach beschränken Sie Ihre Ressourcen mit:
Falls dazu berechtigt, einen Benutzer auch authentifiziert, so dass keine Notwendigkeit zu tun, die Doppel-check. Sie können dann die
[Authorize]
Attribut, die stützt sich aufUser.Identity.IsAuthorized
.Berechtigung kommt praktisch, wenn Sie verwenden können, Rollen Sie die Benutzer gruppieren. Prüfen Sie, ob Ihr ADusers gehören zu einer Gruppe, wenn Sie so etwas tun könnte wie:
InformationsquelleAutor Giorgio Minardi