Проблема с asp core 2.1 и подключением AWS cognito OIDC - PullRequest
0 голосов
/ 27 декабря 2018

Я занимаюсь разработкой основного веб-сайта asp.net, в котором для аутентификации пользователей используется AWS cognito, у меня проблемы с перенаправлениями для авторизации и входа в систему при переключении пользователей между страницами. В fiddler я вижу много перенаправлений для авторизации и входа в систему.-oidc выглядит как бесконечные циклы

Я пытался изменить некоторые настройки в файле startup.cs, а также пытался изменить аутентификацию на oauth2, и у меня были те же проблемы

    public void ConfigureServices(IServiceCollection services)
    {
        //Cognito AWS Integration
        services.Configure<OpenIdConnectOptions>(Configuration.GetSection("Authentication:Cognito"));

        services.Configure<AppData>(Configuration.GetSection("Authentication:Cognito"));


        var serviceProvider = services.BuildServiceProvider();
        var authOptions = serviceProvider.GetService<IOptions<OpenIdConnectOptions>>();

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDistributedMemoryCache();

        /*services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromMinutes(30);
            options.Cookie.HttpOnly = true;
        });*/

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();



        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            options.DefaultSignOutScheme = OpenIdConnectDefaults.AuthenticationScheme;

        })
        .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
        {
            //options.ExpireTimeSpan = TimeSpan.FromMinutes(60);
            // if true - Javascript will not be able to read cookie.
            options.Cookie.HttpOnly = false;
            // required or else it will result in an endless-login
            options.Cookie.SameSite = SameSiteMode.None;

        })
        .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options =>
        {
            options.ResponseType = authOptions.Value.ResponseType;
            options.MetadataAddress = authOptions.Value.MetadataAddress;
            options.ClientId = authOptions.Value.ClientId;
            options.ClientSecret = authOptions.Value.ClientSecret;
            options.SaveTokens = authOptions.Value.SaveTokens;
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = authOptions.Value.TokenValidationParameters.ValidateIssuer
            };
            options.Events = new OpenIdConnectEvents()
            {
                // handle the logout redirection 
                OnRedirectToIdentityProviderForSignOut = context =>
                {
                    var logoutUri = "/";
                    context.Response.Redirect(logoutUri);
                    context.HandleResponse();

                    return Task.CompletedTask;
                },
                OnRedirectToIdentityProvider = ctx =>
                {
                    if (!_currentEnvironment.IsEnvironment("Development"))
                    {
                        //Force scheme of redirect URI (THE IMPORTANT PART)
                        ctx.ProtocolMessage.RedirectUri = ctx.ProtocolMessage.RedirectUri.Replace("http://", "https://", StringComparison.OrdinalIgnoreCase);

                    }
                    bool isAjaxRequest = (ctx.Request.Headers != null && ctx.Request.Headers["X-Requested-With"] == "XMLHttpRequest");

                    if (isAjaxRequest)
                    {
                        ctx.Response.Headers.Remove("Set-Cookie");

                        //ctx.State = NotificationResultState.HandledResponse;
                    }
                    return Task.FromResult(0);
                },
                OnRemoteFailure = context =>
                {

                    context.Response.Redirect("/Prod");
                    context.HandleResponse();
                    return Task.CompletedTask;
                }
            };
        });

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddRazorPagesOptions(options =>
        {
            options.Conventions.AuthorizePage("/Index");
            options.Conventions.AuthorizePage("/DepartmentSelect");
            options.Conventions.AuthorizePage("/Api");
            options.Conventions.AuthorizePage("/ScanPatient");
            options.Conventions.AuthorizeFolder("/Room");
            options.Conventions.AuthorizeFolder("/Patient");
            options.Conventions.AuthorizeFolder("/NewPatient");
            options.Conventions.AuthorizeFolder("/Room");
        });

        AppData.ClientId = authOptions.Value.ClientId;
    }

public void Configure (Приложение IApplicationBuilder, среда IHostingEnvironment) {

        //SessionExtensions.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>());
        CookieHelper.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>());

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }



        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        //app.UseSession();
        app.UseAuthentication();

        app.UseMvc();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...