Бесконечный цикл перенаправления входа в систему с помощью Google и ASP.NET Core Identity

Я попал в цикл перенаправления при попытке доступа к странице за атрибутом авторизации в Net Core 3, независимо от того, вошел ли я в систему или есть ли у пользователя разрешения. Я следил за учебниками MSDN и немного искал, но еще не нашел решения своей проблемы. Я подозреваю, что он не распознает мой идентификационный файл cookie или каким-то образом не перенаправляет на нужную страницу, но мне нужно руководство о том, что искать.

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<GuitarCatalogMVCContext>(options =>
                options.UseSqlite( Configuration.GetConnectionString("DefaultConnection")));


            services.AddIdentity<GuitarCatalogAuthUser, IdentityRole>().AddEntityFrameworkStores<GuitarCatalogMVCContext>().AddDefaultTokenProviders();

            services.AddControllersWithViews();
            services.AddRazorPages();

            services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = GoogleDefaults.AuthenticationScheme;
            })
            .AddCookie()
            .AddGoogle(options =>
            {
                IConfigurationSection googleAuthNSection = Configuration.GetSection("Authentication:Google");

                options.ClientId = googleAuthNSection["ClientId"];
                options.ClientSecret = googleAuthNSection["ClientSecret"];
                options.CallbackPath = new PathString("/signin-google");
            });

            services.AddAuthorization();
        }

     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            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.UseHttpsRedirection();
            app.UseStaticFiles();


            app.UseRouting();

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

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

Используя логин Google на /Identity/Account/Login, я получаю соответствующее сообщение, я могу успешно войти в систему, а URL-адрес:

https://accounts.google.com/signin/oauth/oauthchooseaccount? 
response_type=code &client_id= ______ 
&redirect_uri=https%3A%2F%2Flocalhost%3A44346%2Fsignin-google 
&scope=openid%20profile%20email &state= _______ &flowName=GeneralOAuthFlow

Когда я открываю метод контроллера за атрибутом [Authorize] через <a href="@Url.Action("Create", "Listings")" target="_blank"><h1>TEST CREATE LISTING</h1></a>, он подписывает меня, а затем немедленно возвращает меня на ту же страницу.

Я открыл вкладку «Сеть» в инструментах разработчика, и здесь я вижу, где был обработан мой вход в систему, это привело меня на страницу «Создать», а затем я вернулся на страницу входа. Я не вижу ничего, что указывало бы на то, что мой вход не удалось (или почему он снова предлагает мне войти, когда я вошел в систему).

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


person Exho    schedule 11.06.2020    source источник
comment
какой учебник по msdn вы используете. Я пробовал это также с клиентской библиотекой google .net и получил аналогичный результат.   -  person DaImTo    schedule 23.06.2020
comment
Я столкнулся с такой проблемой пару лет назад, потому что мой браузер неправильно настраивал файлы cookie. Ему не нравилось устанавливать файлы cookie во время перенаправления на стороне сервера, поэтому мне пришлось выполнить перенаправление на стороне клиента с небольшой задержкой по времени.   -  person Captain Kenpachi    schedule 23.06.2020
comment
@DaImTo Я использую этот, docs.microsoft.com/en-us/aspnet/core/security/authentication/   -  person Exho    schedule 23.06.2020
comment
вы просто пытаетесь пройти аутентификацию с помощью Google, а не получить доступ к API?   -  person DaImTo    schedule 24.06.2020


Ответы (1)


Похоже, что проблема в порядке выполнения промежуточного программного обеспечения.

app.UseAuthorization() должен выполняться после app.UseAuthentication()

В вашей текущей реализации, поскольку промежуточное ПО авторизации выполняется первым, объект User никогда не устанавливается, и поэтому все запросы кажутся неавторизованными.

person panda    schedule 24.06.2020
comment
Это решает проблему невозможности доступа к конечной точке за [Авторизовать], когда я вошел в систему как пользователь с разрешениями, но когда я не являюсь, я получаю тот же цикл входа в систему даже при выборе правильных учетных данных. Мне нужно войти в систему и нажать на ссылку - person Exho; 22.08.2020