我正在使用登录表单来验证用户身份。
FormsAuthentication
是正确的,因为它将敏感的用户/角色成员身份存储在客户端的 cookie 或 URL 中。URL 中存在巨大的安全风险,因此我什至不会涉及。使用
FormsAuthentication
cookie,这会产生以下问题: a) 客户端处于指定其自己角色的位置的安全性;b) Cookie 中存储的数据过多。由于我没有通过安全获得任何收益,并且在用户数据存储的大小上浪费了大量时间,我宁愿只使用 Sessions。
我想FormsAuthentication
为所有基本的登录表单处理功能重用类似的东西。但我宁愿让它将用户数据服务器端存储在 Session 中,而不是将客户端全部塞进一个 cookie 中。我宁愿只针对某种会话令牌进行身份验证。
我没有数据库,并且禁止本地磁盘存储用户数据。我依赖 3rd 方身份验证服务提供商,并且要求我必须减少与此服务的聊天。因此,用于临时存储用户信息的会话。糟透了,但这不一定是我要问的问题。此外,一个要求是我必须设置/使用 HttpContext.user 和可能的 Thread.CurrentPrincipal 以便稍后在 AuthorizeAttribute 等事情中使用,以便在视图中显示用户信息等。
因此,FormsAuthentication
将所有用户数据客户端存储在 cookie 中。而 Session 将所有数据存储在服务器端,并且仅依赖于简单的客户端令牌 cookie。但是,在 asp.net 启动和身份验证步骤期间,Session 在任何地方都不可用。是否有等效形式的“成员资格”提供程序将所有数据存储在会话服务器端而不是客户端?
如果没有 Session 等价物...
- 我在哪里设置 HttpContext.user和Thread.CurrentPrincipal 以使这两个值在两个 MVC 应用程序的其余部分中都可用,而不会干扰或弄乱其他 MVC 组件?
- 取决于#1,该入口点是否可以使用 Session ?如果没有,我如何使它可用,以便我可以使用存储在 Session 中的数据创建 Principle/Identity 对象?
- 这不可能是一个独特的要求。是否已经有库可以处理这个问题?