我希望有人可以帮助我理解当我尝试实现自定义 MembershipProvider 时发生的情况。这可能更多的是一个理论问题而不是代码问题......这就是我所拥有的:
- MVC 2 应用(从空的 MVC 2 项目启动)
- 带有我自己的“用户”表的 SQL Server 数据库
- User 类、UserRepository、UserService,等等
目前,我的应用程序通过 UserRepository 进行身份验证,如果成功则返回 User 对象。然后,该用户对象存储在 session 中,并随后由所有需要身份验证的 Controller 操作进行询问。
现在...我知道将其存储在 session 中会使我容易受到 session 劫持,并且更安全的方法是实现我自己的 MembershipProvider。我不明白的是,这个自定义提供程序最终将在哪里存储我的用户对象?我看到重写的 ValidateUser() 方法仅返回一个 bool 值,但我无法弄清楚该信息在该用户在网站上的时间中保存在哪里。
我真的很想保留现有的流程,同时通过消除对用户身份验证 session 的依赖来使其更加安全。我喜欢在用户登录后在整个应用程序中拥有一个完整的用户对象供我使用,但我愿意接受其他建议。似乎许多 MembershipProvider 文档都有点黑匣子。我希望有人能够解释它在幕后实际上做了什么来保留用户身份验证。
提前致谢
最佳答案
用户经过验证后,ASP.Net 成员(member)资格会创建一个 token (一个大型加密字符串),该 token 存储为 cookie 或 URL 字符串的一部分,具体取决于您在配置中的配置方式。它可以选择根据 cookie 是否可用来执行任一操作。该 token 用于保留用户的身份,以回答有关其在低级别如何工作的主要问题。根据自定义提供程序的实现方式,从服务器检索所有其他相关内容(角色、配置文件等)。
这并不一定比 session 更安全 - 如果站点不受 SSL 加密保护,则它具有与 URL 或 cookie 重放相同的漏洞(如果用户将 url 发送给其他人,则 URL 更糟)。
关于c# - 自定义 ASP.NET MembershipProvider 有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762099/