(这个问题类似于Get UPN or email for login user in a .NET web application,但不完全一样。)
在使用 Windows 身份验证的 .NET (C#) Web 应用程序中,我想找到登录用户的 UPN。
我知道如何通过查询 Active Directory 来做到这一点:取 'DOMAINNAME\userName' from HttpContext.Current.User.Identity as WindowsIdentity
; 在 下查找 DOMAINNAMEldap://RootDSE
并找到它的dnsRoot
; 查询(&(objectCategory=person)(objectClass=user)(sAMAccountName=...userName...))
下ldap://...dnsRoot...
;获取此条目的userPrincipalName
属性。(更多细节在回答https://stackoverflow.com/a/513668/223837)。
我的问题:是否可以在不调用 Active Directory 的情况下找到 UPN?鉴于 Microsoft 专注于在任何地方使用 UPN,UPN 是否已经存储在用户向 Web 服务器进行身份验证时创建的令牌中的某处?
(支持观察:如果我whoami /upn
在 Windows 7 上运行,那么 Wireshark 不会显示任何 Active Directory 连接。)
(如果有任何区别:请注意,我们的 Web 应用程序不使用模拟,即我们的 Web 应用程序不会在用户身份下运行。)