(此问题与Get UPN or email for logged in user in a .NET web application类似,但不完全相同。)
在使用Windows身份验证的.NET(C#)Web应用程序中,我想找到已登录用户的UPN。
我知道如何通过查询Active Directory来做到这一点:从HttpContext.Current.User.Identity as WindowsIdentity
中获取“ DOMAINNAME \ userName”;在ldap://RootDSE
下查找DOMAINNAME并找到其dnsRoot
;在(&(objectCategory=person)(objectClass=user)(sAMAccountName=...userName...))
下查询ldap://...dnsRoot...
;获取此条目的userPrincipalName
属性。 (更多详细信息在答案https://stackoverflow.com/a/513668/223837中)。
我的问题:是否可以在不调用Active Directory的情况下找到UPN?鉴于Microsoft的重点是在所有地方使用UPN,UPN是否已存储在用户对Web服务器进行身份验证时创建的令牌中的某个位置?
(支持性观察:如果我在Windows 7上运行whoami /upn
,则Wireshark不会显示任何Active Directory连接。)
(如果有什么不同:请注意,我们的Web应用程序未使用模拟功能,即我们的Web应用程序未在用户身份下运行。)
最佳答案
尝试使用具有属性System.DirectoryServices.AccountManagement.UserPrincipal.Current
的UserPrincipalName
。当然,这将要求该应用程序在Windows身份验证下运行。
编辑Meh,看来该API仍在执行目录查找。