Задать вопрос
@saneok44

C# Asp Net Core 6 MVC не держит аутентификацию по куки заданное время на IIS, что может быть не так?

В режиме разработки за все время тестирования авторизация держится установленное время 7 дней, но как только заливаю на сервер Windows Server под IIS 10 авторизация держится примерно 20-30 минут, далее авторизация слетает, причем куки еще живы, я подозреваю что в куках ключ лежит и сопоставляется с сервером. На форумах вменяемого ответа или даже темы найти не могу.
Раньше я сам делал куки и шифровал их затем заливал в ответ, тогда еще писал на asp web form, решил шагать в ногу и нарвался на черный ящик без ответ почему ...
Приведу реализацию, от инициализация конфига до валидации, надеюсь на помощь

Program.cs
//.....

builder.Services
    .AddAuthentication(BaseProperties.CookieAuthenticationDefaultsScheme)
    .AddCookie(BaseProperties.CookieAuthenticationDefaultsScheme, options =>
    {
        options.Cookie.Name = BaseProperties.CookieName;
        options.ClaimsIssuer = BaseProperties.AppIssuer;
        options.ExpireTimeSpan = TimeSpan.FromDays(BaseProperties.CookieMaxAgeDays);
        options.Cookie.MaxAge = TimeSpan.FromDays(BaseProperties.CookieMaxAgeDays);
        options.SlidingExpiration = true;
        options.LoginPath = "/Login/Index";
        options.LogoutPath = "/Login/Index";
    });

//.....

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


Create ClaimsPrincipal
List<Claim> claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.NameIdentifier, id.ToString(), ClaimValueTypes.Integer));
claims.Add(new Claim("Login", _login));
claims.Add(new Claim("Password", _password));
claims.Add(new Claim(ClaimsIdentity.DefaultIssuer, BaseProperties.AppIssuer));
ClaimsIdentity claimsIdentity = new ClaimsIdentity(claims, BaseProperties.CookieAuthenticationDefaultsScheme);
ClaimsPrincipal principal = new ClaimsPrincipal(claimsIdentity);

await HttpContext.SignInAsync(
    BaseProperties.CookieAuthenticationDefaultsScheme,
    claims,
    new AuthenticationProperties() { 
        IsPersistent = true, 
        ExpiresUtc = DateTime.Now.AddDays(BaseProperties.CookieMaxAgeDays)
    }


CustomAutorize
public class CustomAutorize : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        ServiceWorkers serviceMyUser = new ServiceWorkers();
        var user = context.HttpContext.User;
        //'X-Requested-With': 'XMLHttpRequest'

        string requestWith = context.HttpContext.Request.Headers["X-Requested-With"].ToString() ?? string.Empty;

        if (user != null)
        {
            if (serviceMyUser.CheckedAuth(user))
            {
                return;
            }
            else
            {

                context.Result = string.IsNullOrEmpty(requestWith) ? new RedirectToActionResult("Index", "Login", null) : new UnauthorizedObjectResult("Не авторизован либо сессия истекла");
                return;
            }
        }
        else
        {
            context.Result = string.IsNullOrEmpty(requestWith) ? new RedirectToActionResult("Index", "Login", null) : new UnauthorizedObjectResult("Не авторизован либо сессия истекла");
        }
    }
}
  • Вопрос задан
  • 86 просмотров
Подписаться 2 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы