BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

窗体验证扩展程序

| 作者 Jonathan Allen 关注 526 他的粉丝 ,译者 侯伯薇 关注 0 他的粉丝 发布于 2011年7月21日. 估计阅读时间: 3 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

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

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

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

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

  

//FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);

var ticketData = new NameValueCollection();
ticketData["Name"] = model.UserName; ticketData["Key"] = membershipUser.ProviderUserKey.ToString(); ticketData["Email"] = membershipUser.Email;

new FormsAuthentication().SetAuthCookie(model.UserName, model.RememberMe, ticketData);

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

规模很重要。

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

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

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

查看英文原文:Forms Authentication Extensions

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT