なぜ< deny users =“?” />次の例に含まれていますか?
質問
?
ワイルドカードは認証されていないユーザーを表し、 *
は認証された、および認証されていないすべてのユーザーを表します。私の本は、次のURL認証の例を示しています。
<authorization>
<deny users="?" />
<allow users="dan,matthew" />
<deny users="*" />
</authorization>
しかし、上記のコードは次と同じ効果がありません:
<authorization>
<allow users="dan,matthew" />
<deny users="*" />
</authorization>
または著者が&lt; deny users =&quot;?&quot;も含めたか/&gt;
理由のルール?
解決
ASP.NETは、優先事項として設定ファイルからのアクセスを許可します。潜在的な競合の場合、最初に発生した許可が優先されます。だから、
deny user="?"
匿名ユーザーへのアクセスを拒否します。次に
allow users="dan,matthew"
そのユーザーへのアクセスを許可します。最後に、すべてのユーザーへのアクセスを拒否します。これは、ダン以外の全員が揺れ動き、マシューはアクセスを拒否されます。
追加するために編集:また、@ Deviantが指摘するように、最後のエントリにも未認証が含まれるため、未認証へのアクセスを拒否することは無意味です。このトピックについて説明している優れたブログエントリは、 Guru Sarkarのブログ
他のヒント
&quot;認証モジュールは、実行時に、特定のユーザーアカウントに適合する最初のアクセスルールを見つけるまで、最もローカルな構成ファイルから許可要素と拒否要素を繰り返し処理します。次に、承認モジュールは、最初に見つかったアクセスルールが許可ルールか拒否ルールかに応じて、URLリソースへのアクセスを許可または拒否します。デフォルトの許可ルールはです。したがって、デフォルトでは、特に設定しない限りアクセスが許可されます。&quot;
MSDN の記事p>
deny = * means deny everyone
deny = ? means deny unauthenticated users
最初の例では、deny *はdan、matthewに影響を与えません。これらは前のルールで既に許可されているためです。
ドキュメントによると、2つのルールセットに違いはありません。
例1は、フォーム認証を使用するasp.netアプリケーション用です。ユーザーはセキュリティモジュールに対する認証になるまで認証されないため、これはインターネットアプリケーションの一般的な方法です。
例2は、Windows認証を使用するasp.netアプリケーション用です。 Windows認証では、Active Directoryを使用してユーザーを認証します。これにより、アプリケーションにアクセスできなくなります。この機能はイントラネットアプリケーションで使用します。
次の2つのリンクをご覧ください:
許可の拒否要素(ASP.NET設定スキーマ) http://msdn.microsoft.com /en-us/library/vstudio/8aeskccd%28v=vs.100%29.aspx
承認に要素を許可(ASP.NET設定スキーマ): http://msdn.microsoft.com /en-us/library/vstudio/acsd09b0%28v=vs.100%29.aspx