在使用CookieAuthenticationProvider调用AuthenticationManager.SignIn()之后存储的ClaimsIdentity信息在哪里

问题描述 投票:1回答:1

我们在ASP.Net MVC Web应用程序中使用Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider

“登录”代码使用自定义类来跟踪授权信息(下例中的userRights)。代码如下所示:

string auth = JsonConvert.SerializeObject(userRights);
ClaimsIdentity identity = new ClaimsIdentity(new[]
{
    new Claim(ClaimTypes.AuthorizationDecision, auth),
}, DefaultAuthenticationTypes.ApplicationCookie);

AuthenticationManager.SignIn(identity);

我担心的是,这些信息可能存储在身份验证cookie中,并发送到可能被操作或更改的客户端。

源代码可以很好地隐藏发生的事情。在VisualStudio中“转到实现”声明它找不到IAuthenticationManager.SignIn的任何实现,而Microsoft.Owin.Security.Cookies.CookieAuthenticationProvider的源代码只显示了一堆Action委托,我无法调试,因为我没有符号。

另一个问题是Cookie replay attacks。我正在考虑通过使用会话存储来解决这两个潜在的问题:

Session.Add("AuthorizationDecision", userRights);

并在注销时:

Session.Clear();
Session.Abandon();
AuthenticationManager.SignOut();

通过这种方式,我可以确保信息不会发送到客户端,也无法在那里进行操作。但我可能会忽视某些事情,或者我原来的担忧可能没有理由(由于代码模糊,我无法检查)。我们的团队担心“会话不是为了授权而进行的,可能没有加密或者像使用声明一样安全”如果专家可以通过解释声明存储的位置来分享您的想法或减轻我的担忧,那将是很好的。

- 编辑 -

我继续并从认证声明中删除了授权(因为似乎没有人知道信息的持久性)。它可以在会话中缓存,但会话与cookie相比具有完全独立的生命周期,因此需要进行空检查,并且当会话不为空时还需要检查ClaimsIdentity.IsAuthenticated

c# asp.net-mvc-5 authorization claims-based-identity asp.net-authorization
1个回答
3
投票

关于索赔数据存储的位置有同样的问题。关于你的关注:

我担心的是,这些信息可能存储在身份验证cookie中,并发送到可能被操作或更改的客户端。

Cookie经过加密和签名,因此客户端既不能查看也不能篡改数据。

© www.soinside.com 2019 - 2024. All rights reserved.