Есть ли способ очистить данные OWIN / аутентификации на стороне сервера?

#c# #.net #security #asp.net-mvc-5 #owin

#c# #.net #Безопасность #asp.net-mvc-5 #owin

Вопрос:

После недавнего сканирования безопасности команда info sec заявила, что им не нравится тот факт, что они могут сохранить .Значение AspNet.ApplicationCookie и использовать его снова после этого, предоставляя пользователю доступ к сайту.

Прочитав, я понимаю, что это стандартное поведение, но я должен найти способ полностью прекратить сеанс после выхода пользователя из системы.

Мое понимание здесь немного слабое, поэтому мой поиск дает очень мало результатов. Есть ли способ сделать это?

Ответ №1:

Поздний ответ, но для тех, кто сталкивается с этим:

Мы справились с этим, добавив пользовательский атрибут, который проверяет отпечаток пальца. Мы используем атрибут для любой страницы за логином.

Ниже приведен грубый пример того, как это достигается.

Отпечаток создается при входе в систему и добавляется в кэш:

     private void OwinSignIn(tblUser user)
    {
        var thumbPrint = Guid.NewGuid();
        var claims = new List<Claim>
        {
            ....
            new Claim(ClaimTypes.Thumbprint, thumbPrint.ToString())
        };


        MemoryCache.Default.Set(thumbPrint.ToString(), true, new CacheItemPolicy() { AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(60) });
}
  

Затем атрибут ищет этот отпечаток и действует соответствующим образом:

 public class ValidateThumbprint : FilterAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)

    var identity = (ClaimsIdentity)filterContext.HttpContext.User.Identity;
    var thumbPrint = identity.Claims?.Where(s => s.Type == ClaimTypes.Thumbprint).First().Value;

    if (thumbPrint != null)
    {
        if (MemoryCache.Default.Contains(thumbPrint))
        {
            return;
        }
    }
        // handle invalid thumbprint
}
  

Я не уверен, что это лучший и наиболее безопасный способ, но он предотвращает сохранение и повторное использование cookie после выхода из системы.