IIS-Manager
IIS-ManagerЧтобы ограничить доступ к веб-приложению, администратор может установить URL-авторизацию пользователей и групп с помощью диспетчера IIS:
Web.config
IIS-Manager сохраняет правила авторизации в файле web.config приложения:
<security>
<authorization bypassLoginPages="true">
<remove users="*" roles="" verbs="" />
<add accessType="Allow" users="Testuser" />
<add accessType="Deny" users="*" />
</authorization>
</security>
Когда для bypassLoginPages
установлено значение true
, всем пользователям разрешается доступ к странице входа в систему. Когда пользователь не вошел в систему, он автоматически будет перенаправлен на страницу входа:
<authentication mode="Forms">
<forms [...] loginUrl="~/Auth/Login" [...] >
[...]
</forms>
</authentication>
Приложение MVC5:
Пользователь должен войти в систему через пользовательскую страницу входа в систему под своим Windows SamAccountName и паролем. Учетные данные будут отправлены в действие Login
AuthController
:
[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
}
}
Все контроллеры с ограниченным доступом автоматически проверяют авторизацию с помощью атрибута [Authorize]
:
[Authorize]
public class MainController : Controller
{
[...]
}
Украшение типа [Authorize(Users="User1,User2")]
не является решением, потому что код недоступен для конечных пользователей, которые должны иметь возможность конфигурировать доступ к приложению.
Если пользователь не авторизован, он будет перенаправлен на страницу входа. Это отлично работает. Но мне нужно сделать проверку авторизации в действии Login
раньше. Итак, мой вопрос:
Как я могу вручную проверить в AuthController
, если вошедший в систему пользователь авторизован для перенаправления на MainController
?