是否存在在用户身份验证后触发的事件(Windows)?我在Application_Start()上执行,但它返回false User.Identity.IsAuthenticated
。
我想要的是手动为用户创建和添加角色。
我使用了这个:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User != null)
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is WindowsIdentity)
{
if (string.IsNullOrEmpty(Usuario.Nome))
{
请确保,在项目属性中(alt+enter在项目中)单击WEB并检查NTLM验证。
这对我很有效。现在HttpContext.Current.User.Identity
不再是空
Application_Start()。此外,在应用程序的生命周期中,它只被调用一次。也就是说,到那时您将无法对所有用户进行身份验证。客户端计算机上的当前Windows用户信息由web浏览器通过与web服务器[Wiki]进行哈希的加密交换提供。只有这样,您才能对用户进行身份验证。因此,User.Identity.IsAuthenticated应该可以用于页面加载(请参阅下面的代码)。您可以提取一个常用方法所需的逻辑,并在页面第一次加载时调用它
protected void Page_Load(object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
{
Page.Title = "Home page for " + User.Identity.Name;
// add your logic here
}
else
{
// you get here if auth failed.
Page.Title = "Home page for guest user.";
}
}
更新后的更多信息:
如果角色不存在,我会使用Application_Start()来检查和添加角色。
if (! Roles.RoleExists("Auditors"))
Roles.CreateRole("Auditors");
你可能会发现这篇文章很有用:http://weblogs.asp.net/scottgu/Recipe_3A00_-Implementing-Role_2D00_Based-Security-with-ASP.NET-2.0-using-Windows-Authentication-and-SQL-Server