.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的场景:
- 先安装NuGet包:
System.DirectoryServices.AccountManagement - 使用
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
相关产品推荐
相关产品推荐

