ASP.NETのWindows認証の仕組み


IISでWindows認証を有効にして、ASP.NETアプリケーション上で`HttpContext.Current.User.Identity.Name`というAPIを叩くと、「クライアントがWindowsにログオンするときに使ったActiveDirectoryのアカウント」が取得できるらしいですが、この仕組みを知りたいです。  
※最終的にはJavaEEアプリケーションで同じことをやりたいと思っていますが、仕組みが分からないので、何が必要なのか、あるいは何か重要な機能が存在しないために実現不可（or困難）なのかも判断できない状況です。

そもそも、ブラウザとIISは、何か特殊なプロトコルでの通信をしているのでしょうか？  
それともあくまでHTTP上で解決できているのでしょうか？  
それらは、IE以外のブラウザもサポートしているのでしょうか？  
また、IISはActiveDirectoryとの通信はしていないのでしょうか？




基本的に htb さんのコメントでほとんど答えられているかと思いますので、落穂拾いでも。

Windows 認証 (AD 認証/Kerberos 認証) の場合、ブラウザー → IIS → AD と通信が行われますので、AD
との通信は必ず発生します。  
ADFS を利用している場合というのは、AD サーバーが ADFS に認証に必要な情報を配布することで認証に掛かる負荷を分散軽減している状態であり、IIS
→ AD が IIS → ADFS となるだけで、基本的に差はありません。(Azure AD を利用する場合も同様)

また、この振る舞いは「信用できるサーバー以外には行うと危険な行為」なので、IE でも制限された領域でしか行いません。また、IE
以外でも実現可能なので独自アプリでも可能であることは間違いありません。(ex:
<https://www.teppi.com/column/fileblog_update/update0008/>)

とりあえず「信頼できるネットワークか、公開サービスなら最低限 HTTPS 上で」という感じですね。




基本的に htb さんのコメントでほとんど答えられているかと思いますので、落穂拾いでも。

Windows 認証 (AD 認証/Kerberos 認証) の場合、ブラウザー → IIS → AD と通信が行われますので、AD
との通信は必ず発生します。  
ADFS を利用している場合というのは、AD サーバーが ADFS に認証に必要な情報を配布することで認証に掛かる負荷を分散軽減している状態であり、IIS
→ AD が IIS → ADFS となるだけで、基本的に差はありません。(Azure AD を利用する場合も同様)

また、この振る舞いは「信用できるサーバー以外には行うと危険な行為」なので、IE でも制限された領域でしか行いません。また、IE
以外でも実現可能なので独自アプリでも可能であることは間違いありません。(ex:
<https://www.teppi.com/column/fileblog_update/update0008/>)

とりあえず「信頼できるネットワークか、公開サービスなら最低限 HTTPS 上で」という感じですね。

