2

用户通过身份验证后是否会触发事件(Windows)?我在 Application_Start() 处执行,但它返回false User.Identity.IsAuthenticated.

我想要的是手动为用户创建和添加角色。

4

2 回答 2

1

我用这个:

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 + 在项目中输入)单击 WEB 并检查 NTLM AUTHENTICATION。

这对我有用。现在HttpContext.Current.User.Identity不再为空

于 2014-10-30T15:49:49.967 回答
0

Application_Start()在 ASP.NET 应用程序中的第一个资源(例如页面)被请求时被调用。此外,它在应用程序的生命周期中只调用一次。话虽如此,届时您将无法对所有用户进行身份验证。客户端计算机上的当前 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

于 2014-10-29T20:03:12.443 回答