3

Windows 認証を使用する asp.net イントラネット アプリケーションがあります。数年前に VS 2005 でアプリケーションを作成しましたが、Windows 認証ビットは完全に機能していました。私のweb.configには次のものがあります(内部構成-> system.web要素):

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

これを Firefox でテストして資格情報が必要であることを確認しました。実際、サイトに最初にアクセスするときにネットワーク資格情報の入力を求められ、それらが無効な場合は拒否されます。

しかし、HttpContext.Current.User.Identity にアクセスしようとすると、オブジェクトの Name と AuthenticationType に空の文字列があり、Authenticated = false になっています。インターウェブを調べた後、WindowsTokenRoleProvider を有効にする必要があるのではないかと考えましたが、何も変わりませんでした。

    <roleManager defaultProvider="WindowsProvider" enabled="true" cacheRolesInCookie="false">
        <providers>
            <clear/>
            <add name="WindowsProvider" type="System.Web.Security.WindowsTokenRoleProvider"/>
        </providers>
    </roleManager>

最後に動作するのを確認してから私が行った 2 つのことは、変換ウィザードを使用してプロジェクトを VS 2008 にアップグレードすることです。また、同僚があちこちで作業している間、数か月間プロジェクトを停止しました。 . User.Identity に影響を与えるのは上記の web.config の値だけだと確信していましたが、明らかに何か間違っているようです。他の誰かが同様の問題に遭遇したり、私が間違っていることを見たりしますか? ありがとう。

4

6 に答える 6

3

サイト/仮想のIISで匿名アクセスがオフになっていることを確認する必要があると思います。

于 2009-07-31T22:18:29.493 に答える
3

<httpModules>セクションがクリアされていないことを確認してください。マシンの web.config ファイルには、次のようなスニペットが含まれている必要があります。

    <httpModules>
        <!-- ... -->
        <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
        <!-- ... -->
        <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
        <!-- ... -->
    </httpModules>

ここで重要な要素はWindowsAuthentication. それがあなたの%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.configファイルにあることを確認してください。<clear/>また、自分の Web サイトと、「親」サイトのサイトまたはフォルダーに表示される web.config ファイルの両方のセクションにタグがないことを確認してください<httpModules>。モジュールがなけれWindowsAuthenticationば、ブラウザがログインを強制するかどうかは関係ありません... ASP.NET は、Userこのモジュールが含まれていないと実際にプロパティを設定しません。

の順序付けhttpModulesも重要であり、特に、モジュールはモジュールのWindowsAuthentication表示される必要があると思います。AnonymousIdentification

于 2009-08-10T15:35:11.330 に答える
1

必要な動作を得るために追加してみてください。偽装がオンになっていない場合でも、NETWORK SERVICES または ASPNET ユーザーの名前で多くのことが発生します。

そして、これがHanselmanのブログ投稿で、頭に浮かんだもう1つのクレイジーなアイデアがあります。

于 2009-08-04T22:09:01.647 に答える
0

いくつかのアイデア:

サイト構成で、[ASP.NET構成設定]ダイアログをプルアップします。[認証]タブで、[認証モード]が[Windows]()に設定されていますか?[アプリケーション]タブで、[ローカルのなりすまし]が設定されました(チェックを外す必要があると思います)。

サーバーがドメインから削除されましたか?アプリプールを実行しているユーザーは変更されましたか?ドメインポリシーが変更され、サーバーが(委任ではなく)認証チェックの目的でユーザーになりすますことができなくなりましたか?

サイトにasp.net拡張機能を再インストールしてみましたか?(これはそれ自体が大きなトピックです。)

プログラムでHttpContext.SkipAuthorizationフラグを確認できます。

于 2009-08-04T21:59:07.423 に答える
0

このユーザーをどこで確認しますか?リクエストサイクルでは、承認が行われる前にいくつかのイベントが発生します。

Vista、Windows 7、またはWindows Server 2008でテストしている場合、ASP.NetとIISパイプラインはIIS 7の既定の構成に統合されているため、他の違いが生じる可能性があります。

于 2009-08-08T23:06:45.617 に答える
-3

ID 偽装を追加してみましたか:

<identity impersonate="true" />

web.configに?

于 2009-08-08T10:02:08.627 に答える