Я занимаюсь разработкой основного веб-сайта 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();
}