2016-06-24 35 views
1

当社のエンタープライズ環境では、ASP.NETコアアプリケーションのネットワーク共有から静的ファイルコンテンツを提供するという要件があります。基本的には、サブパス/contentの下に配信されます。このために、我々は正常に動作し、次のコードを、持っている:FileServerミドルウェアと資格情報?

app.UseFileServer(new FileServerOptions 
{ 
    FileProvider = new PhysicalFileProvider("//our/network/share"), 
    RequestPath = new PathString("/content"), 
    EnableDirectoryBrowsing = false 
}); 

今すぐWebアプリケーションがホストされているその状況下システムユーザがファイル共有にアクセスできません生産に。したがって、特定のテクニカルドメインユーザーを使用してファイルにアクセスする必要があります。このため、このシステムユーザーの資格情報(ユーザー名/パスワード)をファイルサーバーに提供する必要があります。

残念ながら、UseFileServer()に資格情報を提供するオプションが見つかりませんでした。それはとにかく可能ですか?

答えて

1

UseFileServerのドキュメントによると、それは他のものの中からUseStaticFilesの機能性を兼ね備えています。 middlewareのドキュメントによると、静的ファイルモジュールは認証チェックを提供しません。

    1. wwwrootにし、任意のディレクトリの外に保管してください:あなたは、許可に基づいてファイルを提供したい場合は

      :彼らはあなたに(再びミドルウェアのドキュメントからの)認証でファイルサービスを実現する方法についていくつかの選択肢を与えてやります静的ファイルミドルウェアにアクセスできます。

    2. コントローラーのアクションを通じてそれらを配信し、承認が適用されるFileResultを返します。

    サーバーにユーザー名とパスワードを渡す方法がわかりません。基本認証のようなものを使用する予定がある場合(上で概説した方法を使用したくない場合)は、(静的ファイルを提供するときに)ヘッダーを変更して目的の効果を達成することができます良い考え。

  • +0

    あなたは間違っています。ファイルシステムにアクセスできるWindowsユーザーの資格情報を提供する必要があります。 Webアプリケーションがホストされているコンテキストの下にあるシステムユーザーには、ファイル共有に対するアクセス権はありません。 - 説明を明確にするために質問が更新されました。 – Matthias

    0

    ミドルウェアを使用してコンテンツを保護します。私は簡単な例を書こうとします(私はあなたのユーザーを認証するために任意の認証ミドルウェアを使用していると仮定し、私の例は静的ファイル用です)。

    public class ProtectFileMiddleware 
    { 
        private readonly RequestDelegate _next; 
    
        public ProtectFileMiddleware(RequestDelegate next) 
        { 
         _next = next; 
        } 
    
        public async Task Invoke(HttpContext context) 
        { 
         if (context.Request.Path.StartsWithSegments("/protected")) 
         { 
          if (!context.User.IsInRole("Admin")) 
          { 
           await context.Authentication.ChallengeAsync(); 
           return; 
          } 
         } 
         await _next(context); 
    
        } 
    } 
    

    と以下のように、このミドルウェアを使用: -

    コードがテストされていないとillustration--

    まずためだけのものです、あなたはこのようなミドルウェアのものを作成する必要があります。

    public void Configure(IApplicationBuilder app) 
        { 
         app.Use(?)Authentication();// it depends on your design 
         app.UseMiddleware<ProtectFileMiddleware>(); 
         app.UseStaticFiles(); 
    
         // other 
        } 
    

    結果:あなたはにアクセスしようとした場合管理者ユーザーとして3210のURLを使用すると、期待される応答が得られます。そうでなければ、401/403の応答が得られます。

    は、より柔軟な方法についてうん、それらの答えはあなたがクライアントの資格について尋ねていると仮定http://odetocode.com/blogs/scott/archive/2015/10/06/authorization-policies-and-middleware-in-asp-net-5.aspx

    +0

    あなたは私を間違えてしまった。ファイルシステムにアクセスできるWindowsユーザーの資格情報を提供する必要があります。 Webアプリケーションがホストされているコンテキストの下にあるシステムユーザーには、ファイル共有に対するアクセス権はありません。 - 説明を明確にするために質問が更新されました。 – Matthias

    1

    を見てみましょう。本当に必要なのは、特定のリソースにアクセスするための資格情報を持つIFileProviderの実装です。私は、.NETがさまざまなユーザーとしてファイルにアクセスするのが非常に優れていることは知らないが、通常は偽装に依存している。How to present credentials in order to open file?