You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中如何获取Windows Active Directory用户名?

在.NET Core中获取Windows Active Directory用户名的几种方法

1. ASP.NET Core Web应用(Windows身份验证场景)

如果你的Web应用启用了Windows身份验证,可直接从HttpContext中提取用户信息:

  • 通过HttpContext.User.Identity.Name获取完整的域\用户名格式字符串,拆分后可得到纯用户名。

示例代码:

using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var fullUsername = HttpContext.User.Identity.Name; // 输出格式:DOMAIN\Username
        var username = fullUsername?.Split('\\')[1]; // 提取用户名部分
        return Content($"当前AD用户名:{username}");
    }
}

需要在Program.cs中启用Windows身份验证:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication(Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme);
// 其他配置代码...

2. 桌面/服务端应用(使用AD管理库)

通过System.DirectoryServices.AccountManagement库直接查询AD,适合无HttpContext的场景:

  1. 先安装NuGet包:System.DirectoryServices.AccountManagement
  2. 使用UserPrincipal.Current获取当前登录的AD用户信息

示例代码:

using System.DirectoryServices.AccountManagement;

public string GetCurrentADUsername()
{
    using (var context = new PrincipalContext(ContextType.Domain))
    {
        var currentUser = UserPrincipal.Current;
        return currentUser?.SamAccountName; // 返回纯用户名(不带域)
        // 可选:currentUser?.DisplayName 获取显示名称;currentUser?.UserPrincipalName 获取UPN格式
    }
}

若需访问远程AD,可指定域名称:

using (var context = new PrincipalContext(ContextType.Domain, "YOUR_DOMAIN_NAME"))
{
    // 后续操作同上
}

3. 调用Windows原生API获取

适合非Web的.NET Core应用,直接调用Windows系统API获取当前登录用户:

示例代码:

using System.Runtime.InteropServices;

public static class UserHelper
{
    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    private static extern bool GetUserName(StringBuilder lpBuffer, ref uint lpnSize);

    public static string GetCurrentUsername()
    {
        uint bufferSize = 1024;
        StringBuilder buffer = new StringBuilder((int)bufferSize);
        
        if (GetUserName(buffer, ref bufferSize))
        {
            var fullName = buffer.ToString();
            return fullName.Contains("\\") ? fullName.Split('\\')[1] : fullName;
        }
        
        throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error());
    }
}

注意事项

  • 以上方法仅适用于Windows环境下的.NET Core应用,跨平台场景需通过LDAP协议连接AD。
  • 使用AD管理库时,确保应用运行账号具备AD访问权限。
  • Web应用启用Windows身份验证时,需确保服务器(IIS/Kestrel)配置正确,Kestrel需搭配IIS或启用Windows身份验证中间件。

内容的提问来源于stack exchange,提问作者thegurbanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:55:19