【问题标题】:Getting FQDN for current user in c#在 C# 中获取当前用户的 FQDN
【发布时间】:2016-07-13 07:18:07
【问题描述】:

我遇到了一个看似简单的问题,但却给我带来了一些麻烦。

假设我有两个受信任的 AD 域: DEMO.internDEMO.trust

我需要在使用 Windows 身份验证的应用程序中获取当前用户的 FQDN。来自两个域的用户都可以使用它。我需要知道哪个用户来自哪个域。

显然,

Environment.UserDomainName 

System.Security.Principal.WindowsIdentity.GetCurrent().Name

在这两种情况下都无法返回 DEMO

我知道:

System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName

给我本地计算机的完整域名,但是如何为当前登录的用户实现呢?

我也试过了:

var host = Dns.GetHostEntry(Environment.UserDomainName);
host.HostName.Dump();

没有成功给我错误“没有这样的主机是已知的”。那么如何获取登录用户的完整域名,例如 DEMO.intern 而不仅仅是 DEMO

【问题讨论】:

    标签: c# .net active-directory windows-authentication


    【解决方案1】:

    经过一番研究,这完成了工作:

    public static class GetUserNameExUtil
    {
        #region Interop Definitions
        public enum EXTENDED_NAME_FORMAT 
        {
            NameUnknown = 0,
            NameFullyQualifiedDN = 1,
            NameSamCompatible = 2,
            NameDisplay = 3,
            NameUniqueId = 6,
            NameCanonical = 7,
            NameUserPrincipal = 8,
            NameCanonicalEx = 9,
            NameServicePrincipal = 10,
            NameDnsDomain = 12,
        }
        [System.Runtime.InteropServices.DllImport("secur32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
        public static extern int GetUserNameEx(int nameFormat, StringBuilder userName, ref int userNameSize);
        #endregion
    
        public static string GetUserName(EXTENDED_NAME_FORMAT nameFormat)
        {
            if (Environment.OSVersion.Platform != PlatformID.Win32NT)
            {
                return null;
            }
    
            StringBuilder userName = new StringBuilder(1024);
            int userNameSize = userName.Capacity;
            if (GetUserNameEx((int)nameFormat, userName, ref userNameSize) != 0)
            {
                string[] nameParts = userName.ToString().Split('\\');
                return nameParts[0];
            }
    
            return null;
        }
        public static string GetUserFullName()
        {
            return GetUserName(EXTENDED_NAME_FORMAT.NameDnsDomain);
        }
    }
    

    【讨论】:

    • 它工作不正常。因为我需要 iis windows 登录用户名,但我没有得到,你有建议??? @m3s5
    猜你喜欢
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多