2009-01-21 24 views
14

在ASP.NET(2.0)应用程序中,我使用FormsAuthentication。(HttpContext.Current.User!= null)足以假定FormsAuthentication已经验证用户身份

在Global.asax/Application_AuthenticateRequest方法中,我检查HttpContext.Current.User是否为空。

这足以知道表单身份验证cookie是否存在,票证未过期,并且总体而言,表单身份验证机制已完成其验证用户的工作?

我需要这个,因为我在那个应用程序中有一定的页面,有时不需要认证来访问(根据一些条件),我把它们放在web.config中的一个单独的“location”指令中为了排除他们从“全部捕获”表单身份验证。

I.e.我正在尝试检查Application_AuthenticateRequest是否需要保护在此“位置”中访问的页面,如果是,则知道用户是否已经过身份验证,或者我需要重定向到登录。

编辑:正如答案建议,最有可能我会去IsAuthenticated。为了让我更好地把握它,这里有2个奖金问题:)(请编辑其他答案添加这些,谢谢):

  1. 我可以假设,如果IsAuthenticated是真的,那么HttpContext.Current。用户将肯定包含经过身份验证的用户的用户名?

  2. 如何强制使用HttpContext.Current.User中的“匿名用户”,如果强制执行FormsAuthentication,并且只有几个页面被“location”指令排除在外?

+0

当用户的凭证是授权访问资源的唯一决定性因素时,我更喜欢它。也许你可以将功能分成两个不同的页面,并允许ASP.NET来处理安全性? – Greg 2009-01-21 19:26:27

回答

28

不,User可能只是对匿名用户的引用。检查HttpContext.Current.Request.IsAuthenticated

+0

谢谢。我的想法是使用“标准”方式,但只是一个侧面问题 - 它怎么可能是“匿名”用户? – 2009-01-21 18:57:57

3

我通常使用Request.IsAuthenticated。我无法告诉你,你的方法是否可行。这听起来应该是这样,尽管如果你支持匿名登录可能会有副作用?

1

好问题:除了别人给出的答案之外,我建议你看看4GuysFromRolla网站上的这篇文章。

1

顺便说一句,一定要检查上下文不为空(以便在httpmodule中工作)。

相关问题