43068


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

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


CC BY-SA 3.0
2018-04-04T02:42:22.417
42917
2018-04-09T03:36:25.110
2018-04-04T02:58:16.073
8078
8078
question
asp.net iis
ASP.NETのWindows認証の仕組み


間違っているかもしれませんが、「統合Windows認証」の機能を使っていると思います。  
NTLM もしくは Kerberos認証の機能を使っているそうです。（詳細はわかりません）

類似の機能をJavaアプリケーションで実現するには、Active Directoryとのシングルサインオン（SSO）認証を導入して、Active
Directoryユーザで Javaのアプリケーションにログインさせれば、Windowsのユーザー名を間接的に取得できると思います。

シングルサインオンについては、いくつかの種類がありますが、ADFS を使って構築するのが一般的（？）かなと思います。

また、商用のJava Application ServerにはActive DirectoryとのSSOに対応しているものがあるので
それらの機能を使えばJava EEアプリケーションからWindowsユーザを取得できるのかもと思います。


CC BY-SA 3.0
2018-04-07T16:40:00.033
43041
2018-04-07T16:40:00.033
5008
42917
answer


基本的に 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 上で」という感じですね。


CC BY-SA 3.0
2018-04-08T21:19:34.777
43068
2018-04-08T21:19:34.777
13613
42917
answer


私は詳しくないのですが、勉強もかねて、ここから情報を引っぱってきました。質問と回答がちゃんと対応できていない可能性もあります。

[ASP.NETにおける認証と認定](http://www.atmarkit.co.jp/ait/articles/0305/17/news001.html)

> ブラウザとIISは、何か特殊なプロトコルでの通信をしているのでしょうか？

WindowsのSAM（Security Account
Manager）データベースに登録されたユーザー・アカウントをダイレクトにASP.NETアプリケーションの認証に用いるため独自のユーザー管理の仕組みを実装していない。  
ユーザーが認証を受ける一連の仕組みについても、IISに実装されている認証プロトコル（基本認証、ダイジェスト認証、Windows統合認証）を利用するため、ASP.NETページへのアクセスが発生したときには、すでに認証を終えた状態になる。と書かれています。だから、2番目の回答と合わせて、特殊なプロトコルではなくて、HTTPじゃないでしょうか。詳細はリンクをたどってください。

> それともあくまでHTTP上で解決できているのでしょうか？

Windows認証ではHTTPとして実装されている認証方式が利用されるため、ブラウザによって表示されるダイアログボックスで資格情報を入力する。と書かれています。  
ただ、セキュリティに難があり、社外等へと公開するのはお勧めではなく、イントラネット・ユーザー向けだそうです。

> IE以外のブラウザもサポートしているのでしょうか？

ここを見ると、特別なブラウザは必要としてないようです。  
[ASP.NETがもたらす次世代のWebプログラミング](http://www.atmarkit.co.jp/ait/articles/0204/09/news001_3.html)

ActiveDirectoryとの連携  
アクティブディレクトリとの通信は連携という意味でよろしかったですか？

> IISはActiveDirectoryとの通信はしていないのでしょうか？

こちらをご覧になっていただくといいのかなという気がいたします。  
[Active
Directoryと連携できるIISの認証機能を理解](http://ascii.jp/elem/000/000/544/544151/index-2.html)

連携できると書いてあるだけで、今回のWindows認証で、確実にしてあるという判断まではできません。ただ、それを使ってユーザーやグループの制御が簡単にできると書いてありますんで、そういう制御がされていれば、連携していると逆算することは可能かと思われます。また、私は文章を読んで行って、これは連携しているな。と感じました。Active
Directoryを使ってユーザーやグループの制御が簡単にできる、基本認証・ダイジェスト認証・Windows統合認証が利用されていると書かれていて、それらを利用しているからです。  


CC BY-SA 3.0
2018-04-09T03:36:25.110
43083
2018-04-09T03:36:25.110
24284
42917
answer