VS2013でのデバッグ時の認証の問題-IIS Express


103

Visual Studio 2013でデバッグするときに、Windowsのユーザー名を取得しようとしています。単に使用しています。

httpcontext.current.user.identity.name

開発サーバーでこれを実行すると問題なく動作し、以前のバージョンのVisual Studioでデバッグモードで実行すると問題なく動作します。

私の問題は-これをVisual Studio 2013で実行すると、空の文字列が表示されます。

私のウェブ設定は次のとおりです。

<system.web>
    <authentication mode="Windows"/>
    <identity impersonate="false"/>
    <authorization>
       <allow users="*"/>
    </authorization>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
</system.web>

回答:


215

私はVS 2012からVS 2013にアップグレードしたばかりで、現在のユーザーID(HttpContext.User.Identity)は匿名で送信されていました。

IIS Express applicationhost.configを変更してみましたが、違いはありませんでした。

解決策は、Webプロジェクトのプロパティを確認することでした。F4を押して、プロジェクトの最上位レベルを選択したら、プロジェクトのプロパティを取得しました。プロジェクトを右クリックしてプロパティを選択しないでください。これはまったく異なるものです。

匿名認証を無効に、Windows認証を有効に変更します。

肉汁のように機能します:)


10
それをありがとう。彼らがそれを「強化」として追加したとは信じられません。それがweb.configの目的です。これで、web.configに表示される内容を信頼できなくなりました。鮮やかさ。
trucker_jim 14

4
IIS Expressで実行されている他のアプリケーションには影響しないので、これは受け入れられた回答よりも優れたアプローチであると思います。
niaher 2014

本当にありがとう。それも私にとってはうまくいきました!Visual Studio 2008のプロジェクト私は、Visual Studio 2013にアップグレードされた
ロブK.

VS 2012では、「Visual Studio開発サーバーを使用する」を使用しました。アップグレードとこれはうまくいきました。現在はIIS Expressを実行していますが。
Thomas Koelle

あなただけのVS 2013にアップグレードした場合は、この1は、受け入れ答えなければなりません
Nishant

130

私がこれを調査していたとき、私は私の答えを見つけましたが、インターネットで答えを見つけることができないので、私はこれを共有したいと思いました:

applicationhost.configファイルを変更して問題を修正しました。私のファイルは「\ My Documents \ IISExpress \ config」フォルダに保存されました。

VS2013は私のweb.configファイルを無視し、さまざまな認証方法を適用していたようです。

ファイルのこの部分を次のように変更する必要がありました。実際には、anonymousAuthenticationをfalseに、windowsAuthenticationモードをtrueに変更しただけです。

<authentication>

  <anonymousAuthentication enabled="false" userName="" />

  <basicAuthentication enabled="false" />

  <clientCertificateMappingAuthentication enabled="false" />

  <digestAuthentication enabled="false" />

  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

  <windowsAuthentication enabled="true">
    <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>

</authentication>

2
IIS Expressを使用してVS2013でデバッグを行い、確実に機能させるには、これを行う必要がありました。これがなくても、一度は問題なく動作し、その後は401で動作するように見えました。(1)applicationhost.configファイルを変更するAppCmdコマンドはありますか。(2)WebプロジェクトのF4で、匿名認証をオフにしてWindows認証をオンにできます。それをVS2012でうまく行っても、VS2013では401フリーの開発環境は生成されません。
IanT8 2013年

4
@ニール、あなたは私の日を救った。ところで:オフにする必要はありませんanonymousAuthentication。オンにするだけで十分windowsAuthenticationです。これらの設定は、Webサイトが使用できる認証メカニズムを制御します。
チッコドロ2014

+1も...このローカルのIISExpressのインスタンスでしばらくの間、この厄介な問題を解決しようとしています
Jeff Lewis

ああ、それはそれを行う方法です。天才。このヒントをありがとう、本当に便利です!
Mike Gledhill、2014

1
私は401取得せずに(WSE3付き)Webサービスの呼び出しをテストできるようにするには、「交渉」を除去しなければならなかった
Wolf5

41

Visual Studioの2013年VS15(しかし、私は、他のすべてのバージョンで同じ場合は推測する)だけでF4を押してとすると、この2つのプロパティを変更します- 匿名認証: 無効にします - Windows認証: 有効にします


1
それをありがとう。彼らがそれを「強化」として追加したとは信じられません。それがweb.configの目的です。これで、web.configに表示される内容を信頼できなくなりました。鮮やかさ。
trucker_jim 14

1
Visual Studio 2010へのロールバックから私を救ったのです!
ジュリアンP

2
これは、IISの設定について話し続けているこれらすべてのSO投稿のうち、#1の質問/回答ではなかったと考えている-2015
失われた

38

プロジェクトのVS2013 F4で、プロパティウィンドウを表示して匿名アクセスを無効にし、「Windows認証」を有効にします

その後、動作します。他に何も変更する必要はありません


苛立たしいことに、このオプションは、Webプロジェクトをデバッグするときに存在しますが、サービスプロジェクトには存在しません。Grrrr ...
マイク

9

VS 2015はこれを変更します。Webプロジェクトに.vsフォルダーが追加され、applicationhost.configがそこにありました。提案された変更を行い(ウィンドウ認証= true、anon = false)、空白ではなくユーザー名の配信を開始しました。


8

C:\ Users [userid] \ Documents \ IISExpress \ configフォルダーにあるapplicationHost.configファイルを開きます。このファイル内で、anonymousAthenticationおよびwindowsAuthenticationのoverrideModeDefaultを「Allow」に変更します。

 <sectionGroup name="security">
                <section name="access" overrideModeDefault="Deny" />
                <section name="applicationDependencies" overrideModeDefault="Deny" />
                <sectionGroup name="authentication">
                    <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                    <section name="basicAuthentication" overrideModeDefault="Deny" />
                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="digestAuthentication" overrideModeDefault="Deny" />
                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="windowsAuthentication" overrideModeDefault="Allow" />
                </sectionGroup>

次に、AnonymousAuthenticationModuleおよびWindowsAuthenticationModuleのlockItemを「false」に変更します。

  <system.webServer>
            <modules>
                <!--
                <add name="HttpCacheModule" lockItem="true" />
-->
                <add name="DynamicCompressionModule" lockItem="true" />
                <add name="StaticCompressionModule" lockItem="true" />
                <add name="DefaultDocumentModule" lockItem="true" />
                <add name="DirectoryListingModule" lockItem="true" />
                <add name="IsapiFilterModule" lockItem="true" />
                <add name="ProtocolSupportModule" lockItem="true" />
                <add name="HttpRedirectionModule" lockItem="true" />
                <add name="ServerSideIncludeModule" lockItem="true" />
                <add name="StaticFileModule" lockItem="true" />
                <add name="AnonymousAuthenticationModule" lockItem="false" />
                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
                <add name="UrlAuthorizationModule" lockItem="true" />
                <add name="BasicAuthenticationModule" lockItem="true" />
                <add name="WindowsAuthenticationModule" lockItem="false" />

これらの変更を行うと、既存のWeb構成設定でIIS ExpressのapplicationHostファイルの内容を上書きできます。


1
これらの変更とログオフは私にとってはうまくいきました。通知アイコンからIIS Expressを停止してVSを再起動しても機能しないため、何かがキャッシュされます。このエラーは本当に厄介で、新しいVMまたは開発者のPCが構築されると、数か月または半年ごとに発生します。それは常に半日も失われ、設定をいじくります。問題は、これらの設定ですぐに修正できるはずですが、すぐには解決しないし、実際に遊んだ後、突然動作するので、非常に奇妙で、私はそれが好きではありません。次に、ログオフをお勧めします。次回はそれを分離しようと試みますが、これは非常に煩わしいデフォルトです。
Tony Wall

6

Webプロジェクトのプロジェクトプロパティを変更し、左側のタブから[Web]を選択して、[サーバー]ドロップダウンを[ローカルIIS]に変更することもできます。新しい仮想ディレクトリを作成し、IISマネージャーを使用して、必要に応じてサイト/アプリプールをセットアップします。

ローカルでテストするためにローカルのIIS vディレクトリ(またはサイト)を通常持っているので、私はこの方法を好みます。この方法でも、他のサイトには影響しません。

Webプロジェクトプロパティ


1

上記のuser3149240が正しい答えを提供しているようです。ただし、Neil Watsonが指摘したように、applicationhost.configファイルはここで機能します。

変更は、VSプロパティペインまたは別の場所にあるファイルでも実際に行うことができます。applicationhost.configファイルの下部には、一連の場所要素があります。IIS Expressの各アプリには、これらのいずれかが含まれているようです。UIの設定を変更すると、ファイルのこのセクションが更新されます。したがって、UIを使用して設定を変更するか、このファイルを変更できます。

以下は、匿名認証がオフでWindows認証がオンの例です。

<location path="MyApp">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

これはVS UIでは次と同等です。

Anonymous Authentication: Disabled
Windows Authentication: Enabled

現在のVSではこれは機能しません。applicationhost.configモジュールがユーザードキュメントとソリューションの.vs / configパスの両方でロック解除されている場合でも、常にロックされていると表示されます。また、これが唯一の場所であるとは限りません。プロパティウィンドウの設定は、実際にはVS WebプロジェクトのXMLに保存されます。しかし、それらを変更しても効果がないため、問題はありません。applicationhostは常にオーバーライドします。これらの変更を機能させるにはログオフが必要でした。
Tony Wall

0

F4で常にこのパネルが表示されるとは限りません。その上、絵は千の言葉に値すると言われます。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.