79

ワイルド?カードは認証されていないユーザーを*表し、認証済みおよび未認証のすべてのユーザーを表します。私の本には、次の URL 承認の例が示されています。

<authorization>
  <deny users="?" />
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>


しかし、上記のコードは以下と同じ効果がありますか?

<authorization>
  <allow users="dan,matthew" />
  <deny users="*" />
</authorization>

<deny users="?" />または、著者は理由でルールも含め ましたか?

4

4 に答える 4

95

ASP.NET は、優先順位として、構成ファイルからのアクセスを許可します。競合が発生する可能性がある場合は、最初に発生した許可が優先されます。そう、

deny user="?" 

匿名ユーザーへのアクセスを拒否します。それで

allow users="dan,matthew" 

そのユーザーにアクセスを許可します。最後に、全員のアクセスを拒否します。dan,matthew 以外の全員がアクセスを拒否されるため、これは揺さぶられます。

追加するために編集: @Deviant が指摘するように、最後のエントリには未認証も含まれているため、未認証へのアクセスを拒否することは無意味です。このトピックについて説明している優れたブログ エントリは、Guru Sarkar のブログにあります。

于 2009-05-06T22:14:49.223 に答える
41

「実行時に、承認モジュールは、特定のユーザー アカウントに適合する最初のアクセス ルールを見つけるまで、最もローカルな構成ファイルから始めて、許可要素と拒否要素を反復処理します。次に、承認モジュールは、へのアクセスを許可または拒否します。最初に見つかったアクセス ルールが許可ルールであるか拒否ルールであるかに応じて、URL リソース。

MSDNの記事

deny = * means deny everyone
deny = ? means deny unauthenticated users

最初の例では、deny * は dan に影響しません。前のルールで既に許可されているためです。

ドキュメントによると、2 つのルール セットに違いはありません。

于 2009-05-06T22:11:15.410 に答える
4

例 1 は、フォーム認証を使用する asp.net アプリケーション用です。ユーザーは何らかのセキュリティ モジュールに対して認証されるまで認証されないため、これはインターネット アプリケーションの一般的な方法です。

例 2 は、Windows 認証を使用する asp.net アプリケーション用です。Windows 認証では、Active Directory を使用してユーザーを認証します。これにより、アプリケーションへのアクセスが妨げられます。この機能をイントラネット アプリケーションで使用しています。

于 2009-05-06T22:13:07.247 に答える