IIS-Manager-Wie kann ich die URL-Autorisierung in MVC5 manuell überprüfen?
den Zugriff auf einen Web-App zu beschränken, ist ein Administrator in der Lage, die URL-Autorisierung von Benutzern und Gruppen über den IIS-Manager festgelegt:
Web .config
Der IIS-Manager speichert die Autorisierungsregeln in der web.config der App:
<security>
<authorization bypassLoginPages="true">
<remove users="*" roles="" verbs="" />
<add accessType="Allow" users="Testuser" />
<add accessType="Deny" users="*" />
</authorization>
</security>
Wenn bypassLoginPages
auf true
eingestellt ist, haben alle Benutzer Zugriff auf die Anmeldeseite.
<authentication mode="Forms">
<forms [...] loginUrl="~/Auth/Login" [...] >
[...]
</forms>
</authentication>
MVC5 App:
Der Benutzer über eine benutzerdefinierte Login-Seite von seinem Windows-SamAccountName einzuloggen in hat und wenn ein Benutzer nicht angemeldet ist, wird er automatisch auf die Anmeldeseite umgeleitet werden Passwort. Die Anmeldeinformationen werden die Login
Wirkung der AuthController
gesendet werden:
[AllowAnonymous]
public class AuthController : Controller
{
public ActionResult Login
{
// validation of SamAccountName and Password against Active Directory here.
[...]
// We want to check the authorization here.
// create authentication ticket
FormsAuthenticationTicket lFormsAuthenticationTicket = new FormsAuthenticationTicket(1,
SamAccountName,
DateTime.Now,
DateTime.Now.AddMinutes(AuthCookieTimeout),
RememberMe,
CustomData,
FormsAuthentication.FormsCookiePath);
// Encrypt the ticket.
string lEncryptedTicket = FormsAuthentication.Encrypt(lFormsAuthenticationTicket);
var lAuthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, lEncryptedTicket);
// Create the cookie.
Response.Cookies.Add(lAuthCookie);
[...]
return RedirectToAction("Index", "Main"); // redirect to the main controller
}
}
Alle eingeschränkt Controller machen die Berechtigungsprüfung über das [Authorize]
Attribut automatisch:
[Authorize]
public class MainController : Controller
{
[...]
}
Eine Dekoration wie [Authorize(Users="User1,User2")]
ist keine Lösung, weil die Code ist nicht für Endbenutzer zugänglich, die die Möglichkeit haben sollten, den Zugriff auf die App zu konfigurieren.
Wenn ein Benutzer nicht autorisiert ist, wird er zur Anmeldeseite weitergeleitet. Das funktioniert gut. Aber ich muss die Berechtigungsprüfung in der Aktion Login
vorher vornehmen. Also meine Frage:
Wie kann ich manuell in meinem AuthController
validieren, wenn der angemeldete Benutzer autorisiert ist, auf die MainController
umzuleiten?
"Da Sie den MainController mit dem Autorize-Attribut versehen haben, bedeutet dies, dass niemand auf seine Aktionen zugreifen kann, ohne sich einzuloggen." → Das ist falsch. Wenn ein Benutzer angemeldet ist (FormsAuthenticationTicket ist festgelegt) und nicht autorisiert ist (URL-Autorisierung von Benutzern und Gruppen über den IIS-Manager), dann wird im Debug-Modus der Haltepunkt in der ersten Zeile des von [Authorized] deklarierten Controllers nicht aktiviert gerührt sein. Wenn der Benutzer jedoch angemeldet und berechtigt ist, kann er auf den Controller zugreifen. – Simon
Sie haben es nicht verstanden. ** 1) ** Wenn Sie '[Autorisieren] 'verwenden, kann niemand ohne Login darauf zugreifen. OK? → es bedeutet, dass jeder, der angemeldet ist, darauf zugreifen kann. ** 2) ** Wenn Sie '[Authorize (Users =" User1, User2 ")]] verwenden, bedeutet dies, dass zwischen den angemeldeten Benutzern nur Benutzer1 und Benutzer2 auf die Aktion zugreifen können. –
Sie haben meinen Kommentar nicht verstanden. Sie sagten: "Wenn Sie [Autorisieren] verwenden, kann niemand ohne Login darauf zugreifen. OK? → Es bedeutet, dass jeder, der angemeldet ist, darauf zugreifen kann." Das ist falsch. Nicht jeder kann darauf zugreifen. Wenn ein Benutzer über eine Definition in der Datei web.config abgelehnt wird, kann er nicht darauf zugreifen. Das ist die aktuelle Tatsache. Eine Definition im Autorize-Attribut würde das Problem nicht lösen. Wie können Administratoren Benutzer und Gruppen beim Kauf der Software einschränken? Sie haben keinen Zugriff auf den Code. – Simon