質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

10858閲覧

ユーザ認証について

doremifa

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2016/10/24 00:28

###発生している問題
お世話になります。
System.Security.Principal.WindowsIdentity.GetCurrent().Name
で取得するとドメイン\ユーザ名が取得できるのに
User.Identity.Nameをみると空になっておりUser.Identity.IsAuthenticatedもfalseになっています。

いったい何が原因なのでしょうか。

###補足情報(言語/FW/ツール等のバージョンなど) ドットネットフレームワーク4.5.2 C# IISの認証規則 ・Windows認証のみ有効(その他無効)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

WindowsIdentity.GetCurrent は、ASP.NET 偽装が無効になっている場合は、ワーカープロセスを実行しているアカウントの WindowsIdentity オブジェクトを取得します。

Page.User.Identity は、現在ページ要求を行っているユーザーを表す ID オブジェクトを取得します。ただし、それらの中身は ASP.NET が書き換えており、特に Name は、匿名アクセスの場合は空文字になります。

詳しくは以下の記事を見てください。

ASP.NET の ID オブジェクト
http://surferonwww.info/BlogEngine/post/2014/01/20/id-objects-in-aspnet-page.aspx

なので、質問者さんの状況(WindowsIdentity.GetCurrent が質問者さんの Windows アカウント、User.Identity.Name が空)から想像すると、Web アプリを Visual Studio から IIS Express で動かしていて、匿名アクセスをしているということになります。

ただし、

Windows認証のみ有効(その他無効)

というのが間違いないとすると解せません。「その他無効」は間違いないですか?

IIS Express は自分は使ってないので認証関係をどのように設定するのか知りませんが、IIS の場合はデフォルトで「匿名認証」が有効になっており、「匿名認証」の方が優先されます(Windows 認証になりません)。そういうことになっていないでしょうか?

投稿2016/10/24 01:16

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doremifa

2016/10/24 06:04

もともと匿名は有効になっておりましたが、無効に変更し、再起動を行っております。 現在はWindows認証のみになっているので同一の値になるのではと思っておりました。 ローカルのIISにはデフォルトサイトしかないので間違えようがないと思っておりますがおっしゃる通りVisualStudioのデバッグモードで実行してますのでデバッグのときは別のものが起動したりするのでしょうか? ご教示いただいたサイトを見る限りWindowsIdentity.GetCurrentで認証しても問題ないような気がしてきましたが何か気を付ける点等ありますか?
退会済みユーザー

退会済みユーザー

2016/10/24 06:49

「WindowsIdentity.GetCurrentで認証しても問題ない」というのは、たぶん私のレスを理解されていないので、そういう発言をされていると思います。 もう一度書きますが、「WindowsIdentity.GetCurrent は、ASP.NET 偽装が無効になっている場合は、ワーカープロセスを実行しているアカウントの WindowsIdentity オブジェクトを取得します」ということで、認証とは関係ないです。 質問者さんが IIS Express を使っているとすると、WindowsIdentity.GetCurrent は開発マシンにログインして Visual Studio を起動しているユーザーになるはずです。なので、質問者さんの環境で「ドメイン\\ユーザ名が取得できる」という結果になったのです。繰り返しますが認証とは関係ないです。 一方、User.Identity.Name が空になったり、User.Identity.IsAuthenticated が false なると言うことは、そのユーザーは認証されておらず匿名アクセスしているということに間違いないです。 Active Directory ドメイン環境下で、Web サーバーもユーザーも同じドメインにあって、統合 Windows 認証でシングルサインオンが実現されている環境でなければ、Web サイトを windows 認証に設定して、匿名認証を含むそれ以外の認証を無効にしてあれば、ユーザーがその web サイトにアクセスした一番最初に以下の記事の画像にあるようなダイアログが出て、そこで認証に通らないとアクセスできません。 Windows 認証でのロール http://surferonwww.info/BlogEngine/post/2011/02/05/Role-in-Windows-Authentication.aspx 質問者さんの環境が、統合 Windows 認証でシングルサインオンが実現されてないのにそのダイアログが出ずアクセスできたとすると Windows 認証にはなっていません。(設定したかもしれませんが、匿名アクセスになっています。User.Identity の結果がそれを裏付けています) ASP.NET Web アプリを動かすには Web サーバーが必要というのは理解されてますか? Web サーバーは (1) ASP.NET 開発サーバー、(2) IIS Express、(3) IIS を利用できます。(1), (2) は通知領域に以下の記事の画像にあるようなアイコンが出るはずです。 ASP.NET 開発サーバーと IIS http://surferonwww.info/BlogEngine/post/2011/11/18/ASPNET-development-server-and-IIS.aspx IIS Express をインストールしました http://surferonwww.info/BlogEngine/post/2012/10/08/iis-express-installation.aspx (1) は VS2013 あたりから実装されなくなっているはずなので、たぶん質問者さんが「VisualStudioのデバッグモードで実行」で使っているのは (2) だと思います。通知領域のアイコンを見てください。
doremifa

2016/10/24 09:34

(3)のローカルIISから(2)のIIS EXpressに変更し、プロパティからWindows認証を有効にすることで解決?できました。 ローカルでうまくいかない点はややもやっとしますが、気にしないことにします。 ありがとうございました。
退会済みユーザー

退会済みユーザー

2016/10/24 10:43

それは解決とは言えないと思うのですが。今後のために、何故ローカル IIS ではダメなのか徹底的に追求することをオススメします。
doremifa

2016/10/25 00:28

ご助言ありがとうございます。 時間ができたときに再度試行したいと思います
退会済みユーザー

退会済みユーザー

2016/10/25 01:03

時間ができたら調べて結果を書いていただけると幸いです。(ここは単なる Q&A サイトではなく、情報交換の場所ということらしいので)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問