gpt4 book ai didi

asp.net - 使用Global.asax进行授权检查

转载 作者:行者123 更新时间:2023-12-04 18:54:49 25 4
gpt4 key购买 nike

在我的ASP.NET Web应用程序中,我想每次用户尝试从应用程序获取页面时,是否都存在该数据库中(当然,这是在第一次将用户详细信息保存在 session 中之后)。
我试图在global.asax中使用Application_AuthenticateRequest事件来
检查每个请求,但此事件中不存在 session 。
我需要一个建议,可以在哪里放置授权逻辑,使我仍然可以使用 session 数据(以减少数据库访问)。

最佳答案

听起来好像您正在“滚动自己的”身份验证系统。

我将研究使用ASP.NET内置的Forms authentication系统,该系统通常与ASP.NET Membership Provider一起使用。 SQL Server已经内置了提供程序,您可以通过从System.Web.Security.MembershipProvider基类继承来创建自己的成员资格提供程序。

本质上,一旦客户端成功进行身份验证,ASP.NET成员资格提供程序通常通过在客户端浏览器中设置客户端Cookie(也称为身份验证票证)来工作。该Cookie随每个后续页面请求一起返回到Web服务器,从而允许ASP.NET(从而使您的代码)确定用户是谁,通常使用单行代码,如下所示:

string username = HttpContext.Current.User.Identity.Name;
// The above gets the current user's name.

if(HttpContext.Current.User.Identity.IsAuthenticated)
// Do something when we know the user is authenticated.

然后,您无需在 session 状态下存储任何内容。当然,如果要在 session 变量中存储特定于用户的数据(即,可能不是用户身份验证的一部分的用户数据,也许是用户喜欢的颜色等),则可以将其存储在 session 变量(在首次验证用户身份后从数据库中获取它)。 session 变量可以基于用户名(假设唯一的名称)进行存储,并使用与上述类似的代码进行检索,该代码获取当前用户的名称以访问正确的 session 对象。

使用内置的表单例份验证,还可以使您使用web.config中包含的简单声明性代码“保护”网站区域免受未经授权的用户的侵害,例如:
<authorization>
<deny users="?"/>
</authorization>

将以上内容添加到“主” web.config中将确保未经授权的用户无法访问您的任何页面(尽管您实际上可能从未这样做过-这仅是示例)。将ASP.NET Role Provider与Membership Provider一起使用,将使您更详细地了解谁可以访问或不能访问网站的各个部分。

关于asp.net - 使用Global.asax进行授权检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/565368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com