web-dev-qa-db-ja.com

エンドポイントには許可メタデータが含まれていますが、承認をサポートするミドルウェアが見つかりませんでした

私は現在、私の地元の開発されたアプリをデジタル海のUbuntu 16.04液滴に移動させる過程にあります。私は.NET CORE 3.1を使用していて、それを大丈夫でサーバーを設定しました。ただし、[Authorize]属性を使用するコントローラのエンドポイントに移動すると、私の本番サーバーでのみ次の例外があります(ローカルではありません)。

An unhandled exception has occurred while executing the request.
System.InvalidOperationException: Endpoint App.Controllers.RsvpController.Index contains authorization metadata, but a middleware was not found that supports authorization.
Configure your application startup by adding app.UseAuthorization() inside the call to Configure(..) in the application startup code. The call to app.UseAuthorization() must appear between app.UseRouting() and app.UseEndpoints(...).
at Microsoft.AspNetCore.Routing.EndpointMiddleware.ThrowMissingAuthMiddlewareException(Endpoint endpoint)
at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.<Invoke>g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)
fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.

これは私のConfigure()メソッドがStartup.csのように見えるものです。

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }

ConfigureServices()でもこれを使用しています。

            services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            }).AddCookie(options =>
            {
                options.LoginPath = new PathString("/Account/Login/");
                options.AccessDeniedPath = new PathString("/Account/Forbidden/");
            });

My Controllerは、コントローラクラス全体の[Authorize]属性を持ちます。

    [Authorize]
    public class RsvpController : Controller
    {
        ...
    }

私はローカルで動作するので、問題が何であるかを理解することはできません。私はaspnetcore_environmentをローカルで "プロダクション"に変えることを試みましたが、それに基づいてどこかにフラグがあるかどうかを確認しましたが、私はまだ問題を受けています。あらゆる助けを借りてありがとう!

15
radmint

Configureメソッドで、このコードを試してください。

             ...
            app.UseAuthentication();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
 _
1
kebek