(此问题与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.CurrentUserPrincipalName。当然,这将要求该应用程序在Windows身份验证下运行。

编辑Meh,看来该API仍在执行目录查找。

08-16 09:03