Проверка подлинности .NET Core при каждом запросе (включая js / spa)

#c# #authentication #asp.net-core #asp.net-core-2.0 #single-page-application

#c# #аутентификация #asp.net-core #asp.net-core-2.0 #одностраничное приложение

Вопрос:

У меня есть проект React внутри решения .NET core, и в основном я просто хочу, чтобы пользователи проходили аутентификацию, чтобы видеть react project / SPA.

введите описание изображения здесь

После проведения большого исследования кажется, что это невозможно без выполнения некоторого кода внутри проекта React, что означает добавление безопасности к JS, которым можно манипулировать в клиенте.

Я видел, что может быть возможно аутентифицировать при каждом запросе в .Net Core, что может быть лучшим способом. Возможно ли это?

Я использовал некоторый код аутентификации из других ресурсов, но я получаю ошибки. это мой код startup.cs

запуск публичного класса { публичный запуск (конфигурация IConfiguration) { Configuration = конфигурация; }

     public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);



        // In production, the React files will be served from this directory
        services.AddSpaStaticFiles(configuration =>
        {
            configuration.RootPath = "ClientApp/build";
        });


    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseAuthentication();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/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.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseSpaStaticFiles();

        // This produces a server error.
        app.Use(async (context, next) =>
        {
            if (!context.User.Identity.IsAuthenticated)
            {
                await context.ChallengeAsync("");
            }
            else
            {
                await next();
            }
        });

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}/{id?}");

            //routes.MapSpaFallbackRoute(
            //     name: "spa-fallback",
            //     defaults: new { controller = "Home", action = "AuthorizedSpaFallBack" });
        });

        app.UseSpa(spa =>
        {
            spa.Options.SourcePath = "ClientApp";

            if (env.IsDevelopment())
            {

                spa.UseReactDevelopmentServer(npmScript: "start");
            }
        });
    }
}
  

Или у кого-нибудь есть другие идеи для достижения того, чего я хочу?

Спасибо

Комментарии:

1. На высоком уровне вам нужна аутентификация веб-токеном JSON для вашего API, который вызывает интерфейс React. Вы аутентифицируете пользователя и выдаете токен для интерфейса. Затем интерфейс присоединяет это ко всем запросам. Затем внутренний API может решить, должен ли пользователь получать доступ к ресурсу, к которому он пытается получить доступ. Безопасность должна основываться на серверной части. Интерфейс, конечно, также может скрывать функции и вещи, которые пользователь не может использовать, но это в дополнение к авторизации в серверной части.

Ответ №1:

Если я вас правильно понял, вы хотите аутентифицировать пользователей, получающих доступ к SPA, с помощью внутренних служб аутентификации. В этом случае вы можете прибегнуть к IdentityServer для этого.

Ссылка ниже демонстрирует использование авторизации API с комбинацией ASP.NET Идентификатор ядра для аутентификации и хранения пользователей и IdentityServer для реализации OpenID Connect.

https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity-api-authorization?view=aspnetcore-5.0

Комментарии:

1. Лучше указывать в ответе тело ссылки, потому что ссылки могут со временем устаревать или даже полностью исчезать.