2017-07-04 9 views
0

私は現在のWindowsユーザーがサイトへのアクセスを許可されているかどうかをチェックするMVCサイト用の単純なアクションフィルタを作成しようとしています。なんらかの理由で、filterContext.HttpContext.User.Identityオブジェクトは常にユーザ名なしで匿名に設定されます。私はさまざまな段階(OnAuthenticateとOnAuthorize)でそれをつかもうとしましたが、それは常に匿名です。ASP.NET IDのパイプラインでWindowsのアイデンティティは常に匿名です

私は現在、(実際にはWindowsの認証機能を設定するthis exampleに続く)IISで有効になって匿名 Windows認証を持っている、と私は私のweb.configファイルのsystem.webノードで次のブロックを持っている:

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

しかし何らかの理由で、アイデンティティは常にユーザー名なしの匿名です。私はここで何かを逃している必要があります。 IISでWindows認証が設定されていると、ユーザー名とパスワードの組み合わせが表示されます(実際にはHTTP401.1エラー0xc000006dで失敗しますが、開発用にカスタムホストヘッダーが設定されている可能性があります)。私はまた、私のサイトがのインターネットゾーンにあると判断され、回答が常にイントラネットのゾーンにサイトを追加するように指定されているため、これが示唆されている記事をいくつか読んだことがあります。これは実際の解決策ではなく、救済策のようだ。

理想的には、私は次のことを持っているしたいと思います:

  1. ユーザーが自分のサイト舞台裏
  2. を閲覧、自分のWindowsユーザー名を拾い、アプリ
  3. によって管理許可されたユーザーに対して認証され
  4. ユーザーが正常に認証されました。ページが読み込まれました。ユーザーは誰も認証されていません。

これを達成するためには何が必要ですか?

ご協力いただきありがとうございます。より多くの文脈を提供できるかどうか教えてください。

編集:は、私は、Windows 7 SP1上でこれを実行している追加するのを忘れ、オープン> =

<system.web> 
    <identity impersonate="true" /> 
</system.web> 

OR

プロジェクトをクリックしないソリューションをお試しください7.5

+0

有効にしていることを確認しますWindows IDの前に401が設定されます。さもなければあなたの身元は匿名になります。イントラネットゾーンまで私は問題が一度もありませんでした。 localhostを使用して認証するときに問題が生じる可能性があります。 –

答えて

0

これら二つのルールは、あなたのコード

<allow users="*" /> 
<deny users="?" /> 

に間違った順序であり、二番目のルールであっても評価されません。

は彼らに

<deny users="?" /> 
<allow users="*" /> 

認証パイプラインもクライアントに401を返すことができるようにあなたが最初に匿名の要求を拒否し、この方法を切り替えてみてください。 NTLM/Kerberos認証でユーザー名が選択されると、2番目のルールはすべてのユーザー(今回認証されたユーザー)を許可します。

匿名認証を無効にする必要があります。ソリューションエクスプローラで

+0

これは問題だったようです!拒否/許可の順番は、後ろ向きには意味があります。ありがとう! –

0

をIISプロパティエクスプローラ右クリックプロパティ=>匿名認証が無効に設定されています。

0

iisから匿名認証を無効にして、Windows認証のみを有効にする必要があります。あなたが最初に誰を許可しているので

0

、プロジェクトの上に押しF4、そしてあなたは、Visual Studioからプロジェクトを実行している場合に有効にWindows認証を変更。

ではIISは、あなたののウェブサイトを選択し - > 認証無効に 匿名認証と " Windows認証が" 場合はなしでログインを完了する必要が

関連する問題