有没有办法清除服务器端OWIN /身份验证数据?

时间:2019-04-01 09:31:26

标签: c# .net security asp.net-mvc-5 owin

最近一次安全扫描后,信息安全团队表示不喜欢可以保存.AspNet.ApplicationCookie值,然后在允许用户访问该网站之后再次使用它的事实。

阅读后,我知道这是标准行为,但是我必须找到一种方法,在注销用户后完全终止会话。

我的理解在这里有点薄,所以我的搜索工作很少。有办法解决吗?

1 个答案:

答案 0 :(得分:0)

一个较晚的答复,但对于遇到此问题的人:

我们通过添加一个用于验证指纹的自定义属性来处理此问题。我们将属性用于登录后的任何页面。

以下是实现此目标的粗略示例。

指纹是在登录时创建的,并已添加到缓存:

    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。