Files
Umbraco-CMS/src/Umbraco.Web/Security/UmbracoBackOfficeCookieAuthOptions.cs

82 lines
3.2 KiB
C#
Raw Normal View History

using System;
using Microsoft.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Configuration;
using Umbraco.Core.Configuration.UmbracoSettings;
using Umbraco.Core.Hosting;
2019-12-04 14:03:39 +01:00
using Umbraco.Core.IO;
namespace Umbraco.Web.Security
{
/// <summary>
/// Umbraco auth cookie options
/// </summary>
2015-04-10 16:55:04 +10:00
public sealed class UmbracoBackOfficeCookieAuthOptions : CookieAuthenticationOptions
{
public int LoginTimeoutMinutes { get; }
2019-11-05 12:54:22 +01:00
public UmbracoBackOfficeCookieAuthOptions(
string[] explicitPaths,
IUmbracoContextAccessor umbracoContextAccessor,
ISecuritySettings securitySettings,
IGlobalSettings globalSettings,
IHostingEnvironment hostingEnvironment,
IRuntimeState runtimeState,
2019-12-04 14:03:39 +01:00
ISecureDataFormat<AuthenticationTicket> secureDataFormat,
IRequestCache requestCache)
{
var secureDataFormat1 = secureDataFormat ?? throw new ArgumentNullException(nameof(secureDataFormat));
LoginTimeoutMinutes = globalSettings.TimeOutInMinutes;
2019-11-05 13:45:42 +01:00
AuthenticationType = Constants.Security.BackOfficeAuthenticationType;
2019-11-05 12:54:22 +01:00
SlidingExpiration = true;
ExpireTimeSpan = TimeSpan.FromMinutes(LoginTimeoutMinutes);
CookieDomain = securitySettings.AuthCookieDomain;
CookieName = securitySettings.AuthCookieName;
CookieHttpOnly = true;
CookieSecure = globalSettings.UseHttps ? CookieSecureOption.Always : CookieSecureOption.SameAsRequest;
2017-07-20 11:21:28 +02:00
CookiePath = "/";
TicketDataFormat = new UmbracoSecureDataFormat(LoginTimeoutMinutes, secureDataFormat1);
//Custom cookie manager so we can filter requests
CookieManager = new BackOfficeCookieManager(umbracoContextAccessor, runtimeState, hostingEnvironment, globalSettings, requestCache, explicitPaths);
}
2019-11-05 12:54:22 +01:00
/// <summary>
/// Creates the cookie options for saving the auth cookie
/// </summary>
/// <param name="ctx"></param>
/// <param name="ticket"></param>
/// <returns></returns>
public CookieOptions CreateRequestCookieOptions(IOwinContext ctx, AuthenticationTicket ticket)
{
if (ctx == null) throw new ArgumentNullException(nameof(ctx));
if (ticket == null) throw new ArgumentNullException(nameof(ticket));
var issuedUtc = ticket.Properties.IssuedUtc ?? SystemClock.UtcNow;
var expiresUtc = ticket.Properties.ExpiresUtc ?? issuedUtc.Add(ExpireTimeSpan);
var cookieOptions = new CookieOptions
{
Path = "/",
Domain = this.CookieDomain ?? null,
HttpOnly = true,
Secure = this.CookieSecure == CookieSecureOption.Always
|| (this.CookieSecure == CookieSecureOption.SameAsRequest && ctx.Request.IsSecure),
};
if (ticket.Properties.IsPersistent)
{
cookieOptions.Expires = expiresUtc.UtcDateTime;
}
return cookieOptions;
}
2017-07-20 11:21:28 +02:00
}
2017-07-20 11:21:28 +02:00
}