(この質問は、.NET Web アプリケーションでログインしているユーザーの UPN または電子メールを取得するに似ていますが、完全ではありません。)
Windows 認証を使用する .NET (C#) Web アプリケーションで、サインインしているユーザーの UPN を見つけたいと考えています。
Active Directory にクエリを実行することでこれを行う方法を知っています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 を見つけることはできますか? どこでも UPN を使用することに Microsoft が重点を置いていることを考えると、UPN は、ユーザーが Web サーバーに対して認証するときに作成されるトークンのどこかに既に格納されているのではないでしょうか?
(補足観察: whoami /upn
Windows 7 で実行した場合、Wireshark は Active Directory 接続を表示しません。)
(違いがある場合: Web アプリケーションは偽装を使用していないことに注意してください。つまり、Web アプリケーションはユーザー ID で実行されません。)