Мы используем аутентификацию Windows, и пользователи могут получить доступ к нашему приложению, если они активны.
Я сделал пользователя неактивным и пытаюсь переместить пользователя на страницу с ошибкой, указав
У пользователя нет доступа к приложению.
Фрагмент кода в web.config
для включения windows аутентификации.
<system.web>
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime />
<authentication mode="Windows" />
<customErrors mode="Off" defaultRedirect="mycustomerror.html"></customErrors>
<pages controlRenderingCompatibilityVersion="4.0" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
Мы проверяем в Db , чтобы проверить, активен ли пользователь для доступа к нашему приложению. если пользователь не активен, нам нужно перенаправить пользователя на страницу с ошибкой, и он должен быть перенаправлен на страницу с ошибкой, даже если пользователь пытается ввести имя контроллера / действия в URL.
Я пробовал это в global.asax и не уверен, как перенаправить на страницу с ошибкой.
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected async void Session_Start(object sender, EventArgs e)
{
if (Session["UserName"] == null)
{
IRepository _repository = new Repository();
var currentUser = await _repository.GetCurrentUser(Path.GetFileName(Context.User.Identity.Name.ToUpper()));
if (currentUser != null)
{
Session["UserName"] = $"{currentUser.FIRST_NAME} {currentUser.LAST_NAME}";
}
else
{
Response.RedirectToRoute(
new RouteValueDictionary {
{ "Controller", "Error" },
{ "Action", "PermissionError" }});
}
}
}
protected async void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
IRepository _repository = new Repository();
var currentUser = await _repository.GetCurrentUser(Path.GetFileName(Context.User.Identity.Name.ToUpper()));
if (currentUser == null || string.IsNullOrEmpty(currentUser.USER_NAME))
{
throw new System.Security.Authentication.AuthenticationException("You don't have permission to access application");
}
}
Но пользователи, у которых нет доступа, приходят к запросу после аутентификации и показывают страницу с ошибкой. Я хотел бы перенаправить на метод действия и показать страницу ошибки.
Даже когда пользователь пытается ввести URL-адрес, пользователь должен перенаправить на метод действия контроллера ошибки и отобразить страницу ошибки и, пожалуйста, дайте мне знать, как можем ли мы достичь этого.
Пожалуйста, дайте мне знать, возможно ли это, или предложите альтернативное решение.