統合Windows認証を使用したログインプロンプトの受信


108

Windows 2003サーバー上のIIS 7で実行されている.NET 3.5アプリケーションがあり、ログインのプロンプトが表示され続けるため、統合Windows認証を適切に機能させることができません。IISでWindows認証を有効に設定し、他のすべてのセキュリティタイプを無効にして、アプリケーションのweb.configファイルの認証/承認を次のように設定しました。

<system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
    <authenticationmode="Windows"/>
    <authorization>
    <deny users = "?" />
    </authorization>
</system.web>

このセットアップでは、Windowsユーザーの裏側での検証により、アクセスを許可し、匿名ユーザーを拒否することが期待されます。ただし、サイトにアクセスしようとすると、Windowsログインポップアップが表示されます。

私はこの問題を数日間トラブルシューティングしており、問題を理解できません。同様の問題のある投稿に基づいて、URLにピリオドが含まれていないことを確認し、IE設定が[統合Windows認証を有効にする]に設定されていることを再確認し、イントラネットサイトにURLを追加しましたが、ポップアップが表示されます。

さらにトラブルシューティングを行うために、IISで匿名認証を有効にし、web.configファイルを変更して、すぐにそれを追加し、Response.Write(System.Security.Principal.WindowsIdentifity.getcurrent()。user.name.toString()を追加しました)認証で使用されているユーザーを確認します。私が得ている結果はIIS APPPOOL \ myappで、これは明らかに私のアプリケーションのIISアプリケーションプールです。

私はまだWindows認証のみを使用していて、ポップアップが表示されず、実際のWindowsユーザーに対してWindows認証が実行されるように、だれでも提供できる支援に本当に感謝しています。

ありがとう。


さらにトラブルシューティングした後の追加メモ:

ログインが失敗し、Windowsログインプロンプトが再度表示されたときに、「SERVERNAME」\「USERNAME」としてログインしようとしたユーザー名が表示されていることに気づきました。ドメイン。これを確認するために、ネットワークドメインユーザーと同じユーザー名とパスワードでローカルユーザーアカウントをアプリサーバーに直接作成し、再度ログインを試みました。その結果、再度ログインプロンプトが表示されましたが、今回はユーザー名とパスワードを入力したところ、正常にログインできました。ネットワークユーザーとアプリサーバーが同じドメイン上にあるため、IIS認証がドメインアカウントではなくローカルアプリサーバーアカウントを指している理由が本当にわかりません。これは現時点でIISの質問であるため、forums.iisに投稿します。


4
次のように、認証とモードの間にスペースが必要です。<authentication mode="Windows" />うまくいけば、それはあなたの質問の単なるタイプミスでしたか?
Sean Hanley、

3
サーバー2003でiis 7を実行していますが、これが不可能であることを確信していますか?
アニチョ

回答:


86

私が取り組んでいるWindows 2008サーバーがあるので、私の答えは、OPがWindows 2003サーバーで持っているものと完全に同じではありません。

これが私がやったことです(これをここに記録して、後で見つけられるようにします)。

私はこれと同じ問題を抱えていました:

ログインプロンプト

私のWeb.configファイルには、次のセクションがあります。

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <allow users="*" />
        <deny users="?" />
    </authorization>
</system.web>

IISでは、これらすべてが認証アイコンの下で解決されるようです。

  1. アクセス許可の編集:ASP.NETアカウントにアクセス許可があることを確認します。鉱山は元々追加されていません。

ASP.NETアクセス許可

次に、認証の機能について説明します。

認証機能

匿名認証を有効にしますIUSR

匿名認証

Windows認証を有効にしてから、右クリックしてプロバイダーを設定します

NTLMが最初である必要があります!

Windows認証

次に、下にいることを確認する詳細設定... 拡張保護がある受け入れるカーネルモード認証が有効にチェックされます。

高度な設定

これを実行したら、Webアプリケーションに戻り、[参照]リンクをクリックして、資格情報を再度入力することなくログインしました。

これがあなたの多くにとって有益であることを願っています。また、それが後で私にも役立つことを願っています。


1
ありがとう、スジェイ。SOでのこれらのテクニックのほとんどは、彼らが何を話しているのかを示すための写真が欠けていることに気付いたので、私が使用したすべてのステップを示したかったのです。これがうまくいかない場合でも、少なくとも彼らはすべてのステップと、他にどのようなオプションを試すかを見ることができます。
jp2code 2015年

1
これは私がこのために夢中になっている驚くべきことです。そして写真はそれをとても簡単にしました。ありがとう!!
KratosMafia

1
私にとってもうまくいきましたが、最後にWindows 2008 r2インスタンスを再起動する必要がありました。私はそれを言及することが重要かもしれないと思います。
Aleksei Mialkin 16

6
IIS 8.5を実行するWindows Server 2012では機能しません
Minh Nguyen

3
これは単に匿名認証を有効にするだけでなく、Windows認証を無視できるようにしませんか?本物の質問ですが、これは上記のように見えます。
ポールホジソン

49

他の人の利益のためだけに。エラーが401.1 Unauthorizedで、エラーコードがと一致する場合、0xc000006d実際には、ローカルマシン名と一致しないFQDNまたはカスタムホストヘッダーへのリクエストをブロックするセキュリティ「機能」が実行されています。

このサポート記事に従って問題を修正します。

https://webconnection.west-wind.com/docs/_4gi0ql5jb.htm(オリジナル、現在は無効:http : //support.microsoft.com/kb/896861

サポート記事から、失われないようにするために:

回避策は、このポリシーを明示的に無効にするレジストリハックです。

この構成を手動で実行するには、サーバーのレジストリでこのキーを見つけます。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

新しいキーを編集または追加します。

DisableLoopbackCheck (DWORD)

次に、値を1に送信してループバックチェックを無効にし(ローカル認証は機能します)、または0に送信しました(ローカル認証は許可されません)。

または、より簡単にPowershellを使用できます。

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -Value "1" -PropertyType dword

Windows 10の最近のビルド(1803以降?)でも、ローカルで認証するためにこの構成設定が必要なようです。

ここにいる他の皆のコメントが私を助けられなかったので、これはしばらく時間がかかりました。この記事を見つけて修正しました。


3
あなたは私のf * gヒーローです!私はこれを達成するために非常に多くの「解決策」を経験してきました。ありがとうございました!
dewd 2014

1
聖なる牛!この事をうまく働かせようとしている2日間、そして最後にあなたは私に答えを与えました!ありがとう!
BernieSF、2015年

1
複数の回答を調べて、構成が私のものと同じであることを確認した後、これが答えでした!
Sietse 2017年

1
あなたの伝説!これでうまくいきました。私はこれを見つけるのに長い時間を費やしました。
アンディヴェネルス

2
@PTD更新され、新しい記事と後世の概要が追加されたため、失われることはありません。MSサポートのパーマリンクはこれで終わりです。
kamranicus

26

ウェブサイトの特定の部分のみを保護したいという同様の問題がありました。IEを除いてすべてがうまくいきました。匿名認証とWindows認証の両方を有効にしています。匿名の場合、IDはアプリケーションプールIDに設定されます。問題はWindows認証にありました。調べてみたところ、フィドラーが起動し、プロバイダーとしてKerberosを使用していることがわかりました(実際には、デフォルトでNegotiateに設定されています)。NTLMに切り替えて修正しました。HTH

ダウディ


1
これで完了です。ありがとうございます。ローカルアクセス時にWindowsユーザーをピックアップすることはできましたが、資格情報要求はドメイン内の他のマシンからポップアップします。
JSancho 2013

1
@Daudi認証方法ごとにIDをどのように設定しますか?
ロブ・ベル

18

Webセキュリティに権限[ドメインユーザー]を追加します。

  • サイトフォルダーの下のIISでサイトを右クリックします。
  • [権限の編集...]をクリックします
  • [セキュリティ]タブを選択します
  • [グループまたはユーザー名]セクションで[編集...]ボタンをクリックします
  • [権限]ポップアップで、グループまたはユーザー名の下にある[追加...]をクリックします。
  • オブジェクト名に[Domain Users]と入力してテキスト領域を選択し、[OK]をクリックして変更を適用します
  • [OK]をクリックしてアクセス許可のポップアップを閉じます
  • [OK]をクリックして[プロパティ]ポップアップを閉じ、新しい設定を適用します

10
これを行う方法の手順が役立ちます。
Drew Chapin

2
+1。あなたは私の日と私の正気を救った。とても有難い!
stakx-2014年

11

すべてを変更して、サーバーに間違いを犯さないでください。2008 R2でWindows認証を使用しているときにWindowsがログオンを要求する場合は、アプリケーションごとにProviders移動して上に移動しNTLMます。Negotiateがリストの最初のである場合、Windows認証は2008 R2の特定のアプリケーションのプロパティで機能を停止する可能性があり、機能しない場合よりもユーザー名とパスワードの入力を求められる場合があります。これは、アプリケーションを更新したときに発生することがあります。NTLMリストの最初よりも確認してください。この問題が再び発生することはありません。


1
これで解決しました。
Bigwave 2013年

9
もちろん、最初にNTLMをリストに入れたくない場合を除きます。このアクションを実行すると結果が発生します。そのような変更を行う人は、NTLMとネゴシエートの違いを理解する必要があります(最も基本的なレベルでは、ネゴシエートはKerberos認証を試みて失敗します失敗した場合はNTLMに戻ります)。Kerberosが必要な場合(および多くの場合)、これは適切なソリューションではありません。ここにいくつかの詳細:msdn.microsoft.com/en-us/library/aa480475.aspx
TCC '27

8

URLのドメイン名にドットが含まれている場合、IEはそれをローカルではなくインターネットアドレスのように扱います。少なくとも2つのオプションがあります。

  1. server.domainを置き換えるためにURLで使用するエイリアスを取得します。たとえば、myapp。
  2. お使いのコンピュータで以下の手順に従ってください。

サイトに移動し、ログインダイアログをキャンセルします。これを起こしてみましょう:

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

IEの設定では:

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

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

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


1
私たちはWindows Server 2012を使用しており、これが私たちにとって有効な唯一のソリューションです。どうもありがとう!
アシロン2017年

5

WindowsIdentity.GetCurrent正解です。APPPOOLユーザーを取得する必要があります。これは、コードを実行しているASP.NETプロセスが現在のIDであるためです。サイトのIDにアクセスしたユーザーを返すには、web.configに次の行を追加する必要があります。

<identity impersonate="true" />

これにより、プロセスはページを要求しているユーザーのIDを想定します。すべてのアクションはユーザーに代わって実行されるため、ネットワーク上のフォルダーを読み取ったり、データベースリソースにアクセスしたりする場合は、現在のユーザーにそれらのアクセス許可が必要になります。なりすましの詳細については、こちらをご覧ください。Web /データベースサーバートポロジの設定方法によっては、偽装が有効になっていると委任の問題が発生する場合があります。

しかし、元の問題は、IDを特定できず、ログインポップアップが表示されるということです。<deny>IISで匿名認証を無効にしている場合は、ブロックは必要ありません。(特別な<location>ブロックなどを除いて)それを含めることはないので、削除してもう一度試してみてください。それ以外はすべて正しく聞こえます。

IISでアプリケーションプールを実行しているユーザーを指定していません。カスタムアカウントですか、それともデフォルトアカウントですか?カスタムの場合、それはWebサーバー上のドメインアカウントですか、それともローカルアカウントですか?カスタムアカウントでは、SPNの登録など、さらにいくつかの手順が必要になる場合があります。また、カスタムアカウントがADで受信ユーザーのアカウントを解決するための権限を持っていない場合の問題である可能性があります。

IISログをチェックして、返されている応答を確認することもできます。ほとんどの場合は401ですが、その後に401.2などのサブ番号が必要です。そのサブ番号は、根本的な問題の特定に役立つ場合があります。このKB記事には5つがリストされています。


SPNの要件について言及する場合は+1。実際、ログインポップアップで直面した問題のほとんどは、Kerberos環境でSPNが欠落していることが原因でした。
SBS

5

これで解決しました。

私のサーバーとクライアントPCはWindows 7であり、同じドメインにあります

  1. iis7.5で、イントラネットのWindows認証を有効にします(他のすべての認証を無効にします。また、web.configファイルでWindows認証について言及する必要はありません。

  2. 次に、クライアントPCに移動します。

  3. IE8または9-ツール-インターネットオプション-セキュリティ-ローカルイントラネット-カスタムレベル-ユーザー認証-ログオン-現在のユーザー名とパスワードによる自動ログオン

  4. この設定を保存します。これで完了です。ユーザー名とパスワードの入力を求められることはありません。

  5. 確認してください。クライアントPCはドメインの一部であるため、この設定にはGPOが必要です。..orelseこの設定は、ユーザーが次回Windowsにログインしたときに元に戻ります


2
1)について、私は実際に偽装とWindows認証を有効にしましたが、すべて問題ありませんでした。私にとっての鍵は2)リモートサイトアドレスをローカルイントラネットゾーンに追加する場所でした。
SideFX 2013年

4

ブラウザに関連することができます。IEを使用している場合は、[詳細設定]に移動して、[Windows統合認証を有効にする]チェックボックスがオンになっていることを確認できます。


4

私の場合、認証設定が正しくセットアップされていません。

そうしなければならなかった

  1. IISマネージャーで.NET承認規則を開く

    IISマネージャーで.NET承認規則を開く
  2. 拒否ルール削除します

    拒否ルールを削除する

3

私たちのイントラネットでは、ここに示すようにセキュリティの設定を微調整することにより、クライアント側で問題が解決されました。右側のチェックボックスのいずれかが機能しました。

IEインターネットオプション


2

ASP.Netアプリケーションで同様の問題を解決しました。

症状: マシンがドメインに正しく参加している場合でも(追加のメモに記載されているように)、ローカルユーザーを使用してアプリにログインできますが、ドメインユーザーは使用できません。セキュリティイベントビューアで、ID = 4625「ドメインsidの不整合」のイベントがありました。

解決策:ここで 解決策を見つけました。問題は、仮想マシンのクローンを作成したテストマシン(Windows Server 2008 R2、1つのドメインコントローラー、および1つのWebサーバー)でした。どちらも同じマシンSIDを持っていたため、明らかに問題が発生しました。これが私がしたことです:

  1. ドメインからWebサーバーを削除します。
  2. VMでc:\ Windows \ System32 \ Sysprep \ Sysprep.exeを実行します。
  3. VMを再起動します。
  4. Webサーバーをドメインに参加させます。

プロセスの一部の設定(ユーザー設定、静的IP、自己署名証明書の再作成)を失いましたが、それらを再作成したので、すべてが正しく機能しています。


制約付き委任を設定しようとすると、複製は失敗します。
SideFX 2013年

2

私も同じ問題を抱えていました。このフォーラムや他のフォーラムで見つかったほとんどのことを試しました。

少し独自のRnDを行った後、ようやく成功しました。

私が入ったIIS設定してから、私のウェブサイトへのアクセス許可のオプションは、私の組織で、ドメインユーザーグループを追加しました。

すべてのドメインユーザーにそのWebサイトへのアクセスが許可されたので、問題は発生しませんでした。

お役に立てれば


4
どんな許可オプションについて話しているのですか?あなたがしたことについて、より詳細な手順を提供できますか?
Drew Chapin

1

DOMAIN \ Usernameなどのドメインプレフィックスでログインしてみましたか?IIS 6はデフォルトでホストコンピューターをデフォルトドメインとして使用するため、ログオン時にドメインを指定すると問題が解決する場合があります。


1

上記のIIS構成のトリックとループバックレジストリハックを試してみましたが、アプリプールのアクセス許可などを確認して再作成しましたが、IIS ExpressまたはIIS 7.5を使用している開発ワークステーションで実行されている認証ループを取り除くことができませんでした。ローカルまたはリモートのブラウジングセッションから。4つの401.2ステータス応答と空白ページを受け取りました。IIS 8.5ステージングサーバーに展開されたまったく同じサイトは問題なく動作します。

最後に、ブラウザによって空白にされたレスポンスボディのマークアップに、ログイン成功のデフォルトページが含まれていることに気付きました。ASP.NETおよびHTTPのカスタムエラー処理により、401エラーがワークステーションのWindows認証を妨害/妨害していると判断しましたステージングサーバーではありません。私はこれをいじるのに数時間費やしましたが、401エラーだけのカスタム処理を削除するとすぐに、ワークステーションは通常に戻りました。自分の足を撃つもう1つの方法としてこれを紹介します。


0

アプリケーションプールIDがApplicationPoolIdentityである場合、IIS7.0またはIIS7.5のWindows認証はKerberos(プロバイダー=ネゴシエート)では機能しません。ネットワークサービスまたは別のビルトインアカウントを使用する必要があります。別の可能性は、NTLMを使用してWindows Authenticatioを機能させることです(Windows認証では、プロバイダー、NTLMを最上位にするか、ネゴシエーションを削除します)

クリスヴァンデヴィイヴェル


3
不正解です。サーバーを再起動します。これで動作することに注意してください。修正プログラムKB2545850を適用します。
アミットナイドゥ2014年

ワオ。再起動して修正しました。どれだけの期間かを今すぐ確認する必要があります。何か案は?まだHotfixを調査していません。
mplwork 14

まったく同じケースがありました。Negotiateは再起動するまでApplicationPoolIdentityで機能しませんでした。
SergeyT 2015

0

アプリケーションプールで使用したユーザー(Identity)がIIS_IUSRSグループを下回らないのと同じ問題が発生しました。ユーザーをグループに追加し、すべてが機能する


0

私の場合、解決策は(上で提案された調整に加えて)私/ユーザーのローカル開発コンピューター/ IIS(ホスティングサーバー)を再起動することでした。ユーザーが新しく作成されたADセキュリティグループに追加されました。コンピューターをログアウト/再起動するまで、ポリシーはユーザーADアカウントに適用されませんでした。

これが誰かを助けることを願っています。


0

私は同じ資格情報のプロンプトの問題に遭遇し、クイック検索を実行しましたが、インターネット上でそれを修正するものはありませんでした。問題を見つけるのに少し時間がかかりました、ばかげた問題です。

IIS->事前設定->物理パス資格情報(空)

VM /サーバーにアクセスできるマシンID(ドメイン/ユーザー)を追加するとすぐに、パスワードプロンプトが停止します。

お役に立てれば


0

私は.netコア2でこの問題を抱えていましたが、ここからのほとんどの提案を行った後、web.configの設定を見逃したようです

<aspNetCore processPath="dotnet" arguments=".\app.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

正しい設定はforwardWindowsAuthToken = "true"でしたが、これは今では明白に思われますが、同じ問題に対して非常に多くの状況がある場合、正確に特定することは困難です。

編集:問題のトラブルシューティングを行う次のMsdn記事も参考になりました。


-1

同じ問題が発生しましたが、Webアプリケーションが実行されているアプリケーションプールのアプリケーションプールIDをNetworkServiceに変更することで解決しました ここに画像の説明を入力してください

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