В случае, если кто-то должен иметь дело с этим, так я получил, чтобы показать пользовательскую несанкционированную страницу.
Создайте пользовательскую несанкционированную страницу, возможно, там выйдите из системы, я поместил мой в ErrorController и назвал действие Несанкционированным.
Первый «белый список» обычай «вы не имеете права» страница в web.config
<location path="Error/Unauthorized">
<system.web>
<authorization>
<allow Users="*"/>
</authorization>
</system.web>
</location>
Примечание: если вы используете ReSharper будет подчеркнуть, что путь «Error/Несанкционированные» не существует , Просто игнорируйте это, потому что, если вы используете веб-формы, этот путь будет отображаться в физическом файле, но с MVC это не так.
Если вы хотите, чтобы позволить пользователю выйти так, что он/она может войти с другой учетной записи, вы должны также настроить выход из системы URL, как не имеющие каких-либо требований в отношении групп:
<location path="Home/Logout">
<system.web>
<authorization>
<allow Users="*"/>
</authorization>
</system.web>
</location>
Теперь вы должны обрабатывать запросы, которые доходят до конца «конвейера» с помощью 401 «Неавторизованный», если пользователь аутентифицирован, и перенаправлять их на пользовательскую несанкционированную страницу:
В global.asax зарегистрируйте событие на EndRequest и выполните чеки, изменить ответ на 302 Найдено (временный переадресация) на пользовательскую неавторизованную страницу:
т е р:
protected MvcApplication(){
EndRequest+=(s, e) =>
{
if (Response.StatusCode == 401 && User.Identity.IsAuthenticated)
{
Response.StatusCode = 302;
Response.Headers.Add("Location", VirtualPathUtility.ToAbsolute("~/Error/Unauthorized"));
}
}
}
System.Web.VirtualPathUtility
очень полезно здесь, потому что он расширяет ~ и генерирует полный адрес
Заголовок место просто имя заголовка, который используется в браузере, когда он получает ответ 302. Затем он выполнит запрос к URL-адресу, который является значением заголовка.
Я был убежден, что WSFederationAuthenticationModule
выполнит этот сценарий с настройкой в web.config, но я действительно не смог его найти.
Для справки вот все настройки в web.config вместе взятые:
<configuration>
...
<location path="Error/Unauthorized">
<system.web>
<authorization>
<allow Users="*"/>
</authorization>
</system.web>
</location>
<location path="Home/Logout">
<system.web>
<authorization>
<allow Users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<authentication mode="None" />
<authorization>
<allow roles="GroupA,GroupB,GroupC,GroupD"/>
<deny users="*" />
</authorization>
...
</system.web>
<system.identityModel>
....
К сожалению, это не работает. Фактический код ошибки, который используется в этой ситуации, равен 401.2, и он никогда не соответствует параметру customErrors 401. Также я считаю, что это 'redirect' вместо' path', и вы не можете перенаправить непосредственно на страницу '.cshtml' (нет http-обработчик для этого). Было бы выполнено действие контроллера (redirect = «Ошибка/Несанкционированное»), но опять же, попробовал это, и перенаправление никогда не произойдет. – Rui