7

イントラネット アプリケーションを作成しています。project.json のターゲット フレームワークは dnx451 です。それが私の公開コマンドです:

dnu publish --runtime dnx-clr-win-x86.1.0.0-rc1-update1 --no-source

データベース接続文字列:

Server=name;Database=name;Trusted_Connection=True;

データベース アクセスを偽装しようとしていますが、うまくいきません。アプリケーションを起動すると、Windows ユーザーが認識され、右上に Hello, Domain\Username と表示されます。データベースにアクセスしようとすると、「ユーザー Domain\Computername のログインに失敗しました」というエラーが表示されます。ユーザーの下でアプリケーション プールを実行すると、すべて正常に動作します。

IIS: .NET CLR バージョンは v4.0、マネージド パイプライン モード クラシック、ID は ApplicationPoolIdentity です。Web サイト認証: ASP.NET の偽装と Windows 認証が有効になっています。

偽装が最終的に機能するようにするには、何を変更する必要がありますか?

4

2 に答える 2

8

すべてのページ要求でユーザーを偽装する場合は、独自のミドルウェアを MVC の前に実行するように構成できます。

public class Impersonate
{
    private readonly RequestDelegate next;
    public Impersonate(RequestDelegate next) {
        this.next = next;
    }
    public async Task Invoke(HttpContext context) {
        var winIdent = context.User.Identity as WindowsIdentity;
        if (winIdent == null) {
            await next.Invoke(context);
        }else {
            WindowsIdentity.RunImpersonated(winIdent.AccessToken, () => {
                next.Invoke(context).Wait();
            });
        }
    }
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
    ....
    app.UseMiddleware<Impersonate>();
    app.UseMvc(...);
    ...
}
于 2016-10-07T02:06:12.953 に答える