繁体   English   中英

在 ASP.NET 中放置身份验证检查的位置

[英]Where to place authentication check in ASP.NET

我有一些代码用于确定用户是否登录,我想将它放在 ASP.NET 网站的每个页面上,以便只有登录用户才能查看它。 问题是该站点被分成多个项目/解决方案,因此维护单个代码可能很困难。

我在想我可以创建一个 class 继承System.Web.UI.Page并覆盖Page_Init ,但这需要更改所有页面,以便它们从新的新 class 继承。而且我认为这不会跨项目工作。

所以我想从不同的方面来解决这个问题:使用 AOP。 我以前从未使用过 Aspects,但看起来我可以使用 PostSharp 编写一个在每个Page_Init (或者Page_Load ?)之前注入代码的 Aspect。 这可能是一个快速的解决方案,但如果我需要一个页面来不执行身份验证检查(每个人都可以使用),我可能会遇到问题。

澄清一下,我已经有了一个登录解决方案; 我只是想检查每个页面上的登录信息。

查看 HttpModules。 asp.net 框架已经编程,因此一个模块在每个页面请求上运行,您只需编写它并将其添加到 web.config。

http://msdn.microsoft.com/en-us/library/zec9k340(v=vs.71).aspx

编辑:这是一个更好的链接,演示了如何处理 BeginRequest 事件http://msdn.microsoft.com/en-us/library/ms227673(v=vs.85).aspx

正如@jrummell 提到的, MembershipProvider是一个不错的选择,但是如果您要创建自定义登录解决方案,请查看此链接,它有一个非常简单的登录实现步骤

由于您似乎已经处理并运行了登录解决方案,因此创建一个覆盖 page_init 的 class 听起来是您的最佳选择。 这可以通过简单地在一个单独的项目中创建 class 来跨其他项目工作,您可以将其包含在其他解决方案中......老实说,这是跨越多个项目的逻辑的最简单方法。这也将是易于维护,因为您以后只需更新一个位置。

如果您使用的是 MasterPages,则不必访问所有页面,只需将其包含在特定的 MasterPage 上,然后将您希望身份验证的所有页面设置为使用该 MasterPage。

Windows Identity Foundation 可以为您解决这个问题。 有关 WIF 的详细信息,请参阅http://msdn.microsoft.com/en-us/security/aa570351 无需重新发明轮子。 如果您只有一个 Web 应用程序,则 Forms 身份验证就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM