Exemplo n.º 1
0
        /// <summary>
        /// Indica si se utilizara el servicio de autenticación.
        /// </summary>
        /// <param name="settings">Configuración del servicio.</param>
        /// <returns>AuthenticationOptions | ApplicationException: si CookiesSettings es nulo.</returns>
        public AuthenticationOptions WithCookies(CookiesSettings settings)
        {
            AuthenticationSettings.CookiesSettings = settings.ToIsNullOrEmptyThrow(nameof(settings));

            return(this);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Carga el servicio de autenticación por cookies.
        /// </summary>
        /// <param name="services">Colección de servicios.</param>
        /// <param name="settings">Configuración del servicio de autenticación por cookies.</param>
        /// <returns>IServiceCollection | ApplicationException: si CookiesSettings es nulo.</returns>
        internal static IServiceCollection LoadAuthCookies(
            this IServiceCollection services,
            CookiesSettings settings)
        {
            var config = settings.ToIsNullOrEmptyThrow(nameof(settings));

            if (config.Enabled.HasValue && config.Enabled.Value)
            {
                var enviroment = services.ToEnvironment();

                services
                .AddAuthentication(config.AuthenticateScheme !)
                .AddCookie(options =>
                {
                    // limita la cookie a HTTPS. Recomiendo configurar esto en Siempre en prod. Déjelo configurado en Ninguno en local.
                    options.Cookie.SecurePolicy = enviroment.IsDevelopment()
                            ? CookieSecurePolicy.None : CookieSecurePolicy.Always;

                    // indica si el navegador puede usar la cookie con solicitudes entre sitios.
                    // Para la autenticación OAuth, configúrelo en Lax.
                    // Estoy configurando esto en Estricto porque la cookie de autenticación es solo para un único sitio.
                    // Establecer esto en Ninguno no establece un valor de encabezado de cookie.
                    options.Cookie.SameSite = SameSiteMode.Strict;

                    options.Cookie.Name = config.CookieName;

                    options.Cookie.HttpOnly = config.HttpOnly !.Value;

                    options.ExpireTimeSpan = new TimeSpan(
                        config.Expire.Days !.Value,
                        config.Expire.Hours !.Value,
                        config.Expire.Minutes !.Value,
                        config.Expire.Seconds !.Value);

                    options.LoginPath = config.LoginPath;

                    options.LogoutPath = config.LogoutPath;

                    options.AccessDeniedPath = config.AccessDeniedPath;

                    options.ReturnUrlParameter = config.ReturnUrlParameter !;

                    options.SlidingExpiration = config.SlidingExpiration !.Value;

                    // options.EventsType = typeof(CustomCookieAuthenticationEvents);
                });

                var authenticationService = services.ToService <IAuthenticationService>();

                if (!services.ToExists <IHttpContextAccessor>())
                {
                    services.AddHttpContextAccessor();
                }

                var httpContextAccessor = services.ToService <IHttpContextAccessor>();

                // services.AddScoped<CustomCookieAuthenticationEvents>();
                services.TryAddSingleton <ICookiesService>(new CookiesService(config, authenticationService !, httpContextAccessor !));
            }

            return(services);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Inicializa una nueva instancia de la clase <see cref="CookiesService"/>.
 /// </summary>
 /// <param name="settings">Configuración de la autenticación.</param>
 /// <param name="authenticationService">Servicio para autenticarse.</param>
 /// <param name="httpContextAccessor">Servicio para acceder al cotexto.</param>
 public CookiesService(CookiesSettings settings, IAuthenticationService authenticationService, IHttpContextAccessor httpContextAccessor)
 {
     CookiesSettings       = settings;
     AuthenticationService = authenticationService;
     HttpContextAccessor   = httpContextAccessor;
 }