web-dev-qa-db-ja.com

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

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 AP​​PPOOL\myappです。これは明らかに私のアプリケーションのIISアプリケーションプールです。

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

ありがとう。


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

ログインが失敗し、Windowsログインプロンプトが再び表示されると、ログインしようとしたユーザー名が「SERVERNAME」\「USERNAME」として表示されているため、サーバーに対してユーザーを検証しようとしていると思われます。ドメイン。これを確認するために、ネットワークドメインユーザーと同じユーザー名とパスワードを使用してアプリサーバーにローカルユーザーアカウントを直接作成し、再度ログインしようとしました。その結果、ログインプロンプトが再び表示されましたが、今回はユーザー名とパスワードを入力すると、正常にログインできました。ネットワークユーザーとアプリサーバーは同じドメイン上にあるため、IIS認証がドメインアカウントではなくローカルアプリサーバーアカウントを指している理由が本当にわかりません。これはIISの質問なので、forums.iis.netに投稿することもできますが、これまで何日もトラブルシューティングを行ってきた人からのアドバイスに感謝します。

101
Casey

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

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

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

login Prompt

Web.configファイルには、このセクションがありました:

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

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

  1. 権限の編集:ASP.NETアカウントに権限があることを確認してください。私はもともと追加されていません。

ASP.NET permission

次に、認証の機能に進みます。

Authentication Features

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

Anonymous Authentication

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

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

Windows Authentication

次に、詳細設定...の下で拡張保護受け入れおよびカーネルモード認証を有効にするであることを確認しますチェック済み:

Advanced Settings

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

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

84
jp2code

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

このサポート記事に従って問題を修正してください。

http://support.Microsoft.com/kb/896861

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

39
kamranicus

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

ダウディ

26
Daudi

Webセキュリティにアクセス許可[ドメインユーザー]を追加します。

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

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

12
Slo

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

  1. Server.domainを置き換えるURLで使用するエイリアスを取得します。たとえば、myapp。
  2. コンピューターで次の手順を実行します。

サイトに移動して、ログインダイアログをキャンセルします。これを起こさせてください:

enter image description here

IEの設定:

enter image description here

enter image description here

enter image description here

6
Bob Horn

これは私のためにそれを修正しました。

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

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

  2. 次に、クライアントPCに移動します。IE8または9- Tools-internet Options-Security-Local Intranet-Sites-advanced-Add your site

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

  4. この設定を保存してください。完了です。ユーザー名とパスワードの入力はもう必要ありません。

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

5
Jose Arun

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

<identity impersonate="true" />

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

しかし、元の問題は、IDを特定できず、ログインポップアップが表示されることです。 IISで匿名認証を無効にしている場合は、<deny>ブロックは必要ないことに注意してください。特別な<location>ブロックなどを除き、決して含めないので、削除して再試行してください。しかし、他のすべては正しく聞こえます。

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

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

4
Sean Hanley

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

4
Dante

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

IE Internet Options

3
mosheb

私の場合、認証設定は適切にセットアップされていません。

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

  1. 開く .NET認証ルール IIS Manager

    open the .NET Authorization Rules in IIS Manager
  2. そして 取り除く その 拒否ルール

    remove the Deny Rule
3
johnecon

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

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

IIS Settingsに進み、Webサイトにpermissionオプションを追加して、組織ドメインユーザーグループを追加しました。

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

お役に立てれば

2
Saurabh

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

症状:マシンがドメインに正しく参加していても、ドメインユーザーではなくローカルユーザーを使用してアプリにログインできました(あなたは追加のメモで言います)。セキュリティイベントビューアで、ID = 4625「Domain sid inconsistent」のイベントがありました。

解決策:解決策が見つかりました here 。問題は、仮想マシン(Windows Server 2008 R2、1つのドメインコントローラー、1つのWebサーバー)を複製したテストマシンでした。両方とも同じマシンSIDを持ち、明らかに問題を引き起こしました。ここに私がやったことがあります:

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

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

2
Matthieu

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

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

1
Mike M

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

1
chalemic

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

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

0
ukie

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

クリス・ヴァン・デ・ヴァイバー

0

同じ資格情報のプロンプトの問題が発生し、クイック検索を行ったが、インターネット上では何も修正されませんでした。問題を見つけるのに少し時間がかかった、ばかげた問題。

IIS-> Advance Setting-> Physical Path Credential(空です)

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

お役に立てれば

0
kao

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

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

正しい設定はforwardWindowsAuthToken = "true"でしたが、これは今では明らかなようですが、同じ問題に対して非常に多くの状況がある場合、特定するのは困難です

編集:私はまた、次の Msdnの記事 が問題のトラブルシューティングを行うのに役立つと感じました。

0
eugen

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

0
user3731689