2

Я использую WebSecurity для аутентификации и пользовательский ClaimsAuthorizationManager для авторизации.ASP.NET MVC 4 Прочитайте постоянное событие Cookie Auth?

Использование авторизации на основе смешанных претензий со встроенными функциями WebSecurity для аутентификации предоставило мне массу значений. Я настоятельно рекомендую его для тех, кто требует сложной логики авторизации, объединяющей несколько систем.

В любом случае, все работает отлично, за исключением функции RememberMe.

Когда пользователь входит в систему, я устанавливаю свой файл cookie (через WebSecurity), обновляю свой ClaimsPrincipal и пишу его на своем SessionSecurityToken. Бам, он работает блестяще.

Однако, когда пользователь ранее решил сохранить (Websecurity) auth cookie, ей разрешено обходить мой метод входа в систему, какие новости до моего ClaimsPrincipal и записывают мою основную информацию в мой SessionSecurityToken. Моя авторизация терпит неудачу, потому что мои претензии не были загружены, потому что у меня не было возможности преобразовать мой ClaimsPrincipal.

Есть ли способ подключиться к событию «Проверка подлинности файлов cookie» (Websecurity)? Если это так, я мог бы с этим справиться, новый мой ClaimsPrincipal, и быть в пути. Заранее спасибо!

ответ

2

Вы можете написать пользовательские AuthorizeAttribute:

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     var authorized = base.AuthorizeCore(httpContext); 
     if (authorized) 
     { 
      httpContext.User = new ClaimsPrincipal(...) 
     } 

     return authorized; 
    } 
} 

Теперь украсят ваши защищенные действия контроллера с этим обычаем атрибут вместо стандартного встроенного:

[MyAUthorize] 
public ActionResult Protected() 
{ 
    ... 
} 
+0

Hot! Duh. Спасибо, сэр. Это отлично работает. – kmehta

+0

@ Darin, хороший. Что делать, если я блокирую все по умолчанию с помощью фильтра Global и белый список с «AllowAnonymous» только для контроллера входа? Я предполагаю, что тот же принцип, в классе FilterConfig, я бы зарегистрировал filters.Add (новый MyAUthorizeAttribute()). Верный ? – joedotnot

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