Asp.net 在会话变量中存储用户id

Asp.net 在会话变量中存储用户id,asp.net,authentication,session,Asp.net,Authentication,Session,当用户登录时(通过openid),我们将创建一个名为“UID”的会话变量,并在其中存储唯一的用户id。稍后,我们将检查会话,以查看用户是否已登录。我认为这不是正确的方法,但我不能强迫团队改变这一点,因为我无法展示如何破解这个实现。有人能告诉我为什么(如果有)这个实现不好吗?我看不出有任何情况下您应该担心通过客户端攻击获得服务器端会话值。有人担心,由于OpenID的地位不高,假冒的OpenID提供商会欺骗用户传递凭据,但这通常是没有根据的 实现似乎是可以接受的,但是考虑到您正在使用ASP.NET,

当用户登录时(通过openid),我们将创建一个名为“UID”的会话变量,并在其中存储唯一的用户id。稍后,我们将检查会话,以查看用户是否已登录。我认为这不是正确的方法,但我不能强迫团队改变这一点,因为我无法展示如何破解这个实现。有人能告诉我为什么(如果有)这个实现不好吗?

我看不出有任何情况下您应该担心通过客户端攻击获得服务器端会话值。有人担心,由于OpenID的地位不高,假冒的OpenID提供商会欺骗用户传递凭据,但这通常是没有根据的

实现似乎是可以接受的,但是考虑到您正在使用ASP.NET,您应该考虑使用iSudio和这个ASP.NET OpenID提供程序:


它经过了很好的测试,并且内置了相当多的安全代码和API支持。

正如日产的粉丝所说,我看不出有什么理由让您担心服务器端会话值被利用


出于好奇,你有什么理由认为这不是正确的方法

我的第一个问题是,是什么让你认为这不是正确的方法

以这种方式存储数据是非常常见、安全的,而且它是专门针对用户进行本地化的。如果您不喜欢出于其他原因使用会话,例如在多个服务器上处理会话,或者必须将会话序列化/反序列化到数据存储(假设为非内存会话),则这是另一种说法,但安全部分不应成为问题

还要记住使用会话的简单性。它使您能够对特定于用户的数据进行数据访问,您需要在整个应用程序中不断、标准和一致地访问这些数据

根据评论进行编辑:


当我开始使用MVC的时候,我也在想同样的事情,它看起来很好。我找不到任何反对这个想法的东西。我甚至问了这个问题,因为我的自定义授权属性必须访问会话,而且我在其中存储了特殊的角色类型,即开即用的授权不太合适。

我同意存储数据是正确的。但在这里,我们为用户存储一个唯一的ID,并检查该值以查看用户是否经过身份验证。如(会话[“UID”]!=null)//用户已登录。我们正在注销时清除此值。这样可以吗?我们也在使用MVC。因此,当我们调用一个动作时,我们会修饰它。这里我们不使用该属性并手动检查UID会话变量。从您的观点来看,我可以看出它是安全的,但这是检查用户是否经过身份验证的方法吗?为了最佳实践。