2017-01-27 2 views
0

Я разрабатываю веб-сайт ASP.NET MVC 5, который использует локальную STS для аутентификации. Я подклассифицировал AuthorizeAttribute для настройки процесса аутентификации/авторизации, добавил MyAuthorizeAttribute в GlobalFilters. Когда пользователь пришел без аутентификации, MyAuthorizeAttribute.OnAuthorize успешно поймал его и создал SignInRequest для перенаправления на STS. Это то, что я хочу. Я заметил, что, когда пользователь успешно прошел аутентификацию и STS перенаправил пользователя обратно, браузер пользователя отправил токен SAML, встроенный в тело запроса в мое веб-приложение MVC, это по дизайну, и я ожидал, что MyAuthenticateAttribute сможет поймать этот запрос, поэтому я могу извлечь токен из тела запроса, проверьте и подтвердите его, однако функция MyAuthenticateAttribute.OnAuthorize() не получила вызов на этот раз, она напрямую перешла к контроллеру. Так что-то не так? Где я должен улавливать и обрабатывать токен POSTed от пользователя? Благодарю.Все входящие запросы обрабатываются AuthorizeAttribute в ASP.NET MVC?

ответ

1

Вам необходимо украсить ваш метод действий атрибутом [Авторизовать] или если вы хотите, чтобы авторизация выполнялась для всех действий в контроллере, тогда установите этот атрибут на самом контроллере.

Также обратите внимание на использование [AllowAnonymous] на https://www.codeproject.com/Articles/1008731/Insight-of-ASP-NET-MVC-s-Authorize-Attribute

+0

Забыл упомянуть, что я добавил MyAuthorizeAttribute для GlobalFilters. – codewarrior

1

AuthorizeAttribute является одновременно Attribute и IAuthorizationFilter. Attributes на самом деле не do что-нибудь, среда MVC просматривает, где этот атрибут добавлен, и регистрирует его как фильтр на лету.

Однако вместо украшения контроллеров или методы действий с ним, вы можете добавить его в качестве глобального фильтра:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new AuthorizationAttribute()); 
     filters.Add(new HandleErrorAttribute()); 
    } 
} 

К тому же, вы можете создать свой собственный IAuthorizationFilter или подкласс AuthorizeAttribute, чтобы делать все, что вам хотеть. Если он зарегистрирован в глобальном масштабе, он будет всегда запускаться для всех действий, а затем вы можете использовать его для выполнения пользовательской авторизации запросов по всему миру.

+0

Забыл упомянуть, что я добавил MyAuthorizeAttribute для GlobalFilters. – codewarrior

Смежные вопросы