あなたの問題の説明から私はCustom HttpHandlers
があなたにとって正しい選択だと思っています。どのタイプのファイルがあなたのフォルダに存在するかについては言及していませんでした。簡潔にするために、私はそれがPDFファイルを持っていると仮定して答えます。
あなたのアプリケーションには異なるユーザーが存在すると言われていたので、.NETの組み込み認証マネージャーと役割プロバイダーを使用する必要があります。シンプルなセキュリティフレームワークの設定では、Webアプリケーションのweb.config保護されたフォルダの背後にPDFファイルを配置し、静的ドキュメントへのアクセスを表示する必要のあるユーザーのみに制限するカスタムHTTPハンドラを作成しますそれ。
サンプルHTTPハンドラ:
public class FileProtectionHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
switch (context.Request.HttpMethod)
{
case "GET":
{
// Is the user logged-in?
if (!context.User.Identity.IsAuthenticated)
{
FormsAuthentication.RedirectToLoginPage();
return;
}
string requestedFile =
context.Server.MapPath(context.Request.FilePath);
// Verify the user has access to the User role.
if (context.User.IsInRole("User"))
{
SendContentTypeAndFile(context, requestedFile);
}
else
{
// Deny access, redirect to error page or back to login
//page.
context.Response.Redirect("~/User/AccessDenied.aspx");
}
break;
}
}
}
方法SendContentTypeAndFile:
private HttpContext SendContentTypeAndFile(HttpContext context, String strFile)
{
context.Response.ContentType = GetContentType(strFile);
context.Response.TransmitFile(strFile);
context.Response.End();
return context;
}
private string GetContentType(string filename)
{
// used to set the encoding for the reponse stream
string res = null;
FileInfo fileinfo = new FileInfo(filename);
if (fileinfo.Exists)
{
switch (fileinfo.Extension.Remove(0, 1).ToLower())
{
case "pdf":
{
res = "application/pdf";
break;
}
}
return res;
}
return null;
}
最後のステップは、あなたがWebConfigの中で、このHTTPハンドラを設定する必要があるということです そしてあなたがより多くを見ることができます情報here
ここでは完全なです0
https:で基本認証を使用し、ファイル共有へのアクセスを偽装できます。 –
フォーム認証を使用するもう一つの理由は、ブラウザが認証情報を要求するのではなく、カスタムログインフォームを必要としていることです。だから私たちはフォームの認証をそのままにしています。問題はファイルシステムに安全にアクセスする方法に残っています。 – Primoz
あなたは偽装にもう通知されていないことをどこでお知りになりましたか?これはこの問題に適しているようです。 –