11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

窗体验证扩展程序

  • 2011-07-20
  • 本文字数:964 字

    阅读完需:约 3 分钟

通常我们会使用现成的大型而复杂的框架,即便能够构建属于自己的框架,可能我们也不想那么做。但是,有时只具有几个类的简单小型类库就能够让一切变得不同。FormsAuthenticationExtensions 这个项目就是典型的例子。

即便是有了像 MVC 3 那样先进的框架,对于公开的站点来说,我还是建议使用古老的表单身份验证作为安全模型。当它与成员和角色提供程序组合在一起时,配置会很容易,并且非常灵活。在最简单的模式中,表单身份验证会基于加密的 cookie 完成,其中包含了用户名或者 id。其他信息都必须使用其他方式访问。可选的方式包括:

  • 调用 Membership.GetUser,在使用默认实现的时候这种方式会查询数据库。这肯定是可行的,但是这样做有些取巧,并且它在页面生命周期中的位置使得调试变得很困难。
  • 在 Session 中会存储额外的信息,那意味着你确实需要让会话保持有效。对于小型站点这没有问题,但是一旦你需要多台 web 服务器,这就会出现问题了。

FormsAuthenticationExtensions 让你有了第三种选择。它不会构建成员缓存或者设置会话服务器,你可以只是把额外的信息存储在身份验证 cookie 中。下面是一个小型 MVC 项目的例子,我用它来测试这个程序库。它替换了 AccountController.LogOn 方法中的默认代码。

复制代码
<p>//FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);</p> <p>var ticketData = new NameValueCollection(); <br></br>ticketData["Name"] = model.UserName; ticketData["Key"] = membershipUser.ProviderUserKey.ToString(); ticketData["Email"] = membershipUser.Email;</p>new FormsAuthentication().SetAuthCookie(model.UserName, model.RememberMe, ticketData);

项目的创建者为我们提出了一项警告:

规模很重要。

你以这种方式存储的信息会嵌入在表单 ticket 中,然后会加密并发送回用户的浏览器。在此之后的每次请求中,整个 cookie 都会发送回来并进行解密。在其中存储大量的数据显然会出现问题。我们要确保其中只存储一些简单的值。

支持 FormsAuthenticationExtensions 与上面的问题毫不相关,那就像载入 NuGet 包一样简单,只需要修改几行代码就可以。

如果你拥有其他小型但很有用的程序库,你认为人们应该了解它们,请在此评论告诉我们,或者也可以使用页面顶端的“提供新闻”链接。

查看英文原文: Forms Authentication Extensions

2011-07-20 09:221569
用户头像

发布了 340 篇内容, 共 120.3 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

NodeJS 读写文件 🎠

德育处主任

node.js 6月月更

FastCorrect:语音识别快速纠错模型丨RTC Dev Meetup

声网

语音识别 RTC Dev Meetup

稳了github star突破9k即时通讯IM开源项目OpenIM版本发布-生产环境重点关注

Geek_1ef48b

市场冷空气来袭,SeekTiger如何逆流而上?

鳄鱼视界

【LeetCode】乘积小于 K 的子数组Java题解

Albert

LeetCode 6月月更

统一返回结果

卢卡多多

返回值 6月月更

HashSet与WeakHashMap的理解

源字节1号

GNU/Linux知识库(1)- 历史和演变

冯亮

Linux DevOps GNU

【愚公系列】2022年06月 通用职责分配原则(六)-多态原则

愚公搬代码

6月月更

JVM调优简要思想及简单案例-对象的回收与保留

zarmnosaj

6月月更

走近分布式缓存Memcached

No Silver Bullet

memcached 分布式缓存 6月月更

JavaScript基础语法知识遨游记

未见花闻

6月月更

市场冷空气来袭,SeekTiger如何逆流而上?

威廉META

模拟红绿灯来看GetX的定向刷新

岛上码农

flutter ios 前端 安卓 6月月更

读书笔记之:如何有效阅读

甜甜的白桃

读书笔记 读书 笔记 6月月更

成为架构师需要点亮哪些知识树

奔向架构师

数据仓库 架构师 6月月更

力扣每日一练之数组上篇Day1

京与旧铺

6月月更

学生管理系统的考试试卷存储方案

爱晒太阳的大白

字节Pico走“小”路

科技新知

数据库每日一题---第16天:计算特殊奖金

知心宝贝

数据库 云计算 前端 后端 6月月更

开源Star10K+数据库工具Beekeeper上手体验,免费够酷值得拥有!

MegaQi

数据库管理工具 6月月更 #开源项目体验

vue动态路由

小恺

6月月更

什么是 IPv6?IPv6有哪些优势?

wljslmz

ipv6 IP地址 网络技术 6月月更

uni-app进阶之模版语法与数据绑定【day7】

黎燃

6月月更

使用统计数据消除生活中的无谓

宇宙之一粟

贝叶斯公式 6月月更

Vue-13-Vif和Vshow的区别

Python研究所

6月月更

flutter系列之:按比例缩放的AspectRatio和FractionallySizedBox

程序那些事

flutter 程序那些事 6月月更

Java—JVM II

武师叔

6月月更

微服务稳定性保障

阿泽🧸

微服务 6月月更

【Python技能树共建】with...as... 实战

梦想橡皮擦

Python 6月月更

Docker 实用技巧三

Nick

Docker 容器 实用技巧 6月月更 实操

窗体验证扩展程序_.NET_Jonathan Allen_InfoQ精选文章