2

エンタープライズ環境では、ASP.NET Core アプリケーションでネットワーク共有から静的ファイル コンテンツを提供する必要があります。基本的に、サブパスの下で提供されます/content。このために、正常に動作する次のコードがあります。

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

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

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

4

3 に答える 3

1

ええ、これらの回答は、クライアントの資格情報について尋ねていることを前提としています。本当に必要なのは、特定のリソースにアクセスするための資格情報を持つ IFileProvider 実装です。.NET がさまざまなユーザーとしてファイルにアクセスするのに非常に適しているかどうかはわかりません。通常、偽装に依存しています。ファイルを開くために資格情報を提示する方法を参照してください。

于 2016-06-24T16:57:22.927 に答える
1

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

-- 以下のコードはテストされておらず、説明のみを目的としています --

まず、次のようなミドルウェアを作成する必要があります。

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);

    }
}

以下のようにこのミドルウェアを使用します。

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

        // other
    }

結果: 管理者ユーザーとして url にアクセスしようとする/protectedと、期待どおりの応答が得られます。それ以外の場合は、401/403 応答が返されます。

より柔軟な方法については、http://odetocode.com/blogs/scott/archive/2015/10/06/authorization-policies-and-middleware-in-asp-net-5.aspxをご覧ください。

于 2016-06-24T07:50:28.163 に答える