【问题标题】:Windows Authentication - Get windows usernameWindows 身份验证 - 获取 Windows 用户名
【发布时间】:2014-01-07 10:08:27
【问题描述】:

我有一个使用 Windows 身份验证 (WA) 的 MVC4 应用程序,它是在 Webconfig 文件中设置的:

  <system.web>
    <authentication mode="Windows"/>
  </system.web>

我正在使用这行代码来获取用户名,而我又在所示的 LINQ 查询中使用它:

var userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

var  loc  = (from l in data.Locations.OrderBy(l => l.LocationName)
                        join s in data.LocationSecurities.Where(s=> s.UserName.Contains(userName)) on l.LocationID equals s.LocationId
                        select new
                        {
                            LocationId = l.LocationID,
                            Name = l.LocationName
                        }
                        ).ToList().Distinct();

这在调试模式下有效,但是当应用程序发布到 localhost 或 Web 服务器时它不起作用。我看过 SQL Profiler。似乎将用户名作为 DefaultAppPool,并没有带回任何结果!

这是探查器跟踪:

exec sp_executesql N'SELECT 
[Extent1].[LocationID] AS [LocationID], 
[Extent1].[LocationName] AS [LocationName]
FROM  [admin].[Location] AS [Extent1]
INNER JOIN [admin].[LocationSecurity] AS [Extent2] ON [Extent1].[LocationID] = [Extent2].[LocationID]
WHERE [Extent2].[UserName] LIKE @p__linq__0 ESCAPE N''~''',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'%DefaultAppPool%'

知道为什么会这样吗?

提前致谢。

【问题讨论】:

  • 发生这种情况是因为在调试模式下,该进程由您的用户身份运行。当您将其发布到 IIS 时,会使用另一个用户身份来运行该进程,因此它不起作用。
  • 根据 Dave Bish 在下面的回答,我认为您不需要那么多代码来找到所需的用户。 MVC/System.Web 中有一些“快捷方式”选项

标签: c# asp.net .net asp.net-mvc-4


【解决方案1】:

要从操作方法(通过 Windows 身份验证)中获取当前登录的用户,您必须查询当前的 HttpContext,例如:

HttpContext.User.Identity.Name

【讨论】:

    【解决方案2】:

    您的 web.config 中的代码:

     <authentication mode="Windows">
             </authentication>
    

    .页面中的代码:

    Response.Write(Page.User.Identity.Name);
    

    msdn

    【讨论】:

      【解决方案3】:

      试试HttpContext.User.Identity.Name。您通过当前的HttpContext 检索用户当前登录的名称。

      【讨论】:

      • 提供一行和纯代码的“答案”在 SO 上很少(如果有的话)被认为是可以接受的。请尝试提供一些解释,说明您的答案为何有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2023-03-26
      • 2015-11-22
      • 2017-05-05
      相关资源
      最近更新 更多