From 73216ee1ef9cd5d739a938bb08b152e36f733160 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 7 Oct 2020 11:18:03 +0300 Subject: [PATCH] Extract service: AbpAntiForgeryAuthCookieNameProvider --- .../AbpAntiForgeryAuthCookieNameProvider.cs | 25 +++++++++++++++++++ .../Mvc/AntiForgery/AbpAntiForgeryOptions.cs | 6 ++--- ...dateAntiforgeryTokenAuthorizationFilter.cs | 22 ++++++++-------- ...dateAntiforgeryTokenAuthorizationFilter.cs | 16 +++++------- 4 files changed, 45 insertions(+), 24 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryAuthCookieNameProvider.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryAuthCookieNameProvider.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryAuthCookieNameProvider.cs new file mode 100644 index 0000000000..48b71e34ae --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryAuthCookieNameProvider.cs @@ -0,0 +1,25 @@ +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.AntiForgery +{ + public class AbpAntiForgeryAuthCookieNameProvider : ITransientDependency + { + private readonly IOptionsSnapshot _namedOptionsAccessor; + private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions; + + public AbpAntiForgeryAuthCookieNameProvider( + IOptionsSnapshot namedOptionsAccessor, + IOptions abpAntiForgeryOptions) + { + _namedOptionsAccessor = namedOptionsAccessor; + _abpAntiForgeryOptions = abpAntiForgeryOptions.Value; + } + + public virtual string GetNameOrNull() + { + return _namedOptionsAccessor.Get(_abpAntiForgeryOptions.AuthCookieName)?.Cookie?.Name; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs index defc794998..5cfd1cf1e7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs @@ -10,14 +10,14 @@ /// /// Used to find auth cookie when validating Anti Forgery token. - /// Default value: ".AspNet.ApplicationCookie". + /// Default value: ".AspNetCore.Identity.Application". /// - public string AuthorizationCookieName { get; set; } + public string AuthCookieName { get; set; } public AbpAntiForgeryOptions() { TokenCookieName = "XSRF-TOKEN"; - AuthorizationCookieName = ".AspNet.ApplicationCookie"; + AuthCookieName = ".AspNetCore.Identity.Application"; } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs index 04c3326b15..c0dbcd246a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs @@ -1,6 +1,5 @@ using System; using Microsoft.AspNetCore.Antiforgery; -using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -11,19 +10,20 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery public class AbpAutoValidateAntiforgeryTokenAuthorizationFilter : AbpValidateAntiforgeryTokenAuthorizationFilter, ITransientDependency { private readonly AntiforgeryOptions _antiforgeryOptions; - private readonly IOptionsSnapshot _namedOptionsAccessor; - private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions; + private readonly AbpAntiForgeryAuthCookieNameProvider _antiForgeryAuthCookieNameProvider; public AbpAutoValidateAntiforgeryTokenAuthorizationFilter( IAntiforgery antiforgery, IOptions antiforgeryOptions, - IOptions abpAntiForgeryOptions, - IOptionsSnapshot namedOptionsAccessor, + AbpAntiForgeryAuthCookieNameProvider antiForgeryAuthCookieNameProvider, ILogger logger) - : base(antiforgery, antiforgeryOptions, abpAntiForgeryOptions, namedOptionsAccessor, logger) + : base( + antiforgery, + antiforgeryOptions, + antiForgeryAuthCookieNameProvider, + logger) { - _namedOptionsAccessor = namedOptionsAccessor; - _abpAntiForgeryOptions = abpAntiForgeryOptions.Value; + _antiForgeryAuthCookieNameProvider = antiForgeryAuthCookieNameProvider; _antiforgeryOptions = antiforgeryOptions.Value; } @@ -34,11 +34,11 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery return false; } - var cookieAuthenticationOptions = _namedOptionsAccessor.Get(_abpAntiForgeryOptions.AuthorizationCookieName); + var authCookieName = _antiForgeryAuthCookieNameProvider.GetNameOrNull(); //Always perform antiforgery validation when request contains authentication cookie - if (cookieAuthenticationOptions?.Cookie.Name != null && - context.HttpContext.Request.Cookies.ContainsKey(cookieAuthenticationOptions.Cookie.Name)) + if (authCookieName != null && + context.HttpContext.Request.Cookies.ContainsKey(authCookieName)) { return true; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs index 5ff410a9c2..a544de4f17 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs @@ -1,7 +1,6 @@ using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Antiforgery; -using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.ViewFeatures; @@ -14,22 +13,19 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery { private IAntiforgery _antiforgery; private readonly AntiforgeryOptions _antiforgeryOptions; - private readonly IOptionsSnapshot _namedOptionsAccessor; - private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions; + private readonly AbpAntiForgeryAuthCookieNameProvider _antiForgeryAuthCookieNameProvider; private readonly ILogger _logger; public AbpValidateAntiforgeryTokenAuthorizationFilter( IAntiforgery antiforgery, IOptions antiforgeryOptions, - IOptions abpAntiForgeryOptions, - IOptionsSnapshot namedOptionsAccessor, + AbpAntiForgeryAuthCookieNameProvider antiForgeryAuthCookieNameProvider, ILogger logger) { _antiforgery = antiforgery; _antiforgeryOptions = antiforgeryOptions.Value; - _namedOptionsAccessor = namedOptionsAccessor; _logger = logger; - _abpAntiForgeryOptions = abpAntiForgeryOptions.Value; + _antiForgeryAuthCookieNameProvider = antiForgeryAuthCookieNameProvider; } public async Task OnAuthorizationAsync(AuthorizationFilterContext context) @@ -66,11 +62,11 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery return false; } - var cookieAuthenticationOptions = _namedOptionsAccessor.Get(_abpAntiForgeryOptions.AuthorizationCookieName); + var authCookieName = _antiForgeryAuthCookieNameProvider.GetNameOrNull(); //Always perform antiforgery validation when request contains authentication cookie - if (cookieAuthenticationOptions?.Cookie.Name != null && - context.HttpContext.Request.Cookies.ContainsKey(cookieAuthenticationOptions.Cookie.Name)) + if (authCookieName != null && + context.HttpContext.Request.Cookies.ContainsKey(authCookieName)) { return true; }