[OutputCache] 属性と [Authorize] 属性は互いにうまく機能します。AuthorizeAttribute.OnAuthorization() メソッドは、出力キャッシュ システムにフックを設定し、ページがキャッシュから提供される前に承認フィルターを強制的に再実行します。認可フィルターのロジックが失敗した場合、キャッシュミスとして扱われます。認証ロジックが成功すると、ページはキャッシュから提供されます。そのため、アクションに [Authorize(Roles = "Moderator, Administrator")] と [OutputCache] がある場合、現在のユーザーがモデレーターまたは管理者の役割でない限り、ページはキャッシュから提供されません。
これは、ユーザーまたは役割によって異なることに注意してください。文字通り、元のチェックを再実行しています。ユーザー A (モデレーター) が入ってきて、ページがキャッシュされるとします。ここで、ユーザー B (管理者) が入ってきて、キャッシュされたページにアクセスします。管理者とモデレーターの両方が許可されているため、[承認] チェックは成功し、ユーザー B に提供される応答には、ユーザー A に提供された応答とまったく同じ内容が含まれます。
応答置換は MVC 2 では機能しないことに注意してください。潜在的に機密性の高いデータを提供している場合、ここでの最善の策はそれをキャッシュしないことです。絶対にキャッシュする必要がある場合は、AJAX コールバックを使用して不足しているデータを動的に埋めることで、応答置換に似たものを模倣できます。