Browse Source

Extract service: AbpAntiForgeryAuthCookieNameProvider

pull/5728/head
Halil İbrahim Kalkan 6 years ago
parent
commit
73216ee1ef
  1. 25
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryAuthCookieNameProvider.cs
  2. 6
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs
  3. 22
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs
  4. 16
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs

25
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<CookieAuthenticationOptions> _namedOptionsAccessor;
private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions;
public AbpAntiForgeryAuthCookieNameProvider(
IOptionsSnapshot<CookieAuthenticationOptions> namedOptionsAccessor,
IOptions<AbpAntiForgeryOptions> abpAntiForgeryOptions)
{
_namedOptionsAccessor = namedOptionsAccessor;
_abpAntiForgeryOptions = abpAntiForgeryOptions.Value;
}
public virtual string GetNameOrNull()
{
return _namedOptionsAccessor.Get(_abpAntiForgeryOptions.AuthCookieName)?.Cookie?.Name;
}
}
}

6
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAntiForgeryOptions.cs

@ -10,14 +10,14 @@
/// <summary> /// <summary>
/// Used to find auth cookie when validating Anti Forgery token. /// Used to find auth cookie when validating Anti Forgery token.
/// Default value: ".AspNet.ApplicationCookie". /// Default value: ".AspNetCore.Identity.Application".
/// </summary> /// </summary>
public string AuthorizationCookieName { get; set; } public string AuthCookieName { get; set; }
public AbpAntiForgeryOptions() public AbpAntiForgeryOptions()
{ {
TokenCookieName = "XSRF-TOKEN"; TokenCookieName = "XSRF-TOKEN";
AuthorizationCookieName = ".AspNet.ApplicationCookie"; AuthCookieName = ".AspNetCore.Identity.Application";
} }
} }
} }

22
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpAutoValidateAntiforgeryTokenAuthorizationFilter.cs

@ -1,6 +1,5 @@
using System; using System;
using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@ -11,19 +10,20 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery
public class AbpAutoValidateAntiforgeryTokenAuthorizationFilter : AbpValidateAntiforgeryTokenAuthorizationFilter, ITransientDependency public class AbpAutoValidateAntiforgeryTokenAuthorizationFilter : AbpValidateAntiforgeryTokenAuthorizationFilter, ITransientDependency
{ {
private readonly AntiforgeryOptions _antiforgeryOptions; private readonly AntiforgeryOptions _antiforgeryOptions;
private readonly IOptionsSnapshot<CookieAuthenticationOptions> _namedOptionsAccessor; private readonly AbpAntiForgeryAuthCookieNameProvider _antiForgeryAuthCookieNameProvider;
private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions;
public AbpAutoValidateAntiforgeryTokenAuthorizationFilter( public AbpAutoValidateAntiforgeryTokenAuthorizationFilter(
IAntiforgery antiforgery, IAntiforgery antiforgery,
IOptions<AntiforgeryOptions> antiforgeryOptions, IOptions<AntiforgeryOptions> antiforgeryOptions,
IOptions<AbpAntiForgeryOptions> abpAntiForgeryOptions, AbpAntiForgeryAuthCookieNameProvider antiForgeryAuthCookieNameProvider,
IOptionsSnapshot<CookieAuthenticationOptions> namedOptionsAccessor,
ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> logger) ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> logger)
: base(antiforgery, antiforgeryOptions, abpAntiForgeryOptions, namedOptionsAccessor, logger) : base(
antiforgery,
antiforgeryOptions,
antiForgeryAuthCookieNameProvider,
logger)
{ {
_namedOptionsAccessor = namedOptionsAccessor; _antiForgeryAuthCookieNameProvider = antiForgeryAuthCookieNameProvider;
_abpAntiForgeryOptions = abpAntiForgeryOptions.Value;
_antiforgeryOptions = antiforgeryOptions.Value; _antiforgeryOptions = antiforgeryOptions.Value;
} }
@ -34,11 +34,11 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery
return false; return false;
} }
var cookieAuthenticationOptions = _namedOptionsAccessor.Get(_abpAntiForgeryOptions.AuthorizationCookieName); var authCookieName = _antiForgeryAuthCookieNameProvider.GetNameOrNull();
//Always perform antiforgery validation when request contains authentication cookie //Always perform antiforgery validation when request contains authentication cookie
if (cookieAuthenticationOptions?.Cookie.Name != null && if (authCookieName != null &&
context.HttpContext.Request.Cookies.ContainsKey(cookieAuthenticationOptions.Cookie.Name)) context.HttpContext.Request.Cookies.ContainsKey(authCookieName))
{ {
return true; return true;
} }

16
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AntiForgery/AbpValidateAntiforgeryTokenAuthorizationFilter.cs

@ -1,7 +1,6 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Antiforgery;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Mvc.ViewFeatures;
@ -14,22 +13,19 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery
{ {
private IAntiforgery _antiforgery; private IAntiforgery _antiforgery;
private readonly AntiforgeryOptions _antiforgeryOptions; private readonly AntiforgeryOptions _antiforgeryOptions;
private readonly IOptionsSnapshot<CookieAuthenticationOptions> _namedOptionsAccessor; private readonly AbpAntiForgeryAuthCookieNameProvider _antiForgeryAuthCookieNameProvider;
private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions;
private readonly ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> _logger; private readonly ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> _logger;
public AbpValidateAntiforgeryTokenAuthorizationFilter( public AbpValidateAntiforgeryTokenAuthorizationFilter(
IAntiforgery antiforgery, IAntiforgery antiforgery,
IOptions<AntiforgeryOptions> antiforgeryOptions, IOptions<AntiforgeryOptions> antiforgeryOptions,
IOptions<AbpAntiForgeryOptions> abpAntiForgeryOptions, AbpAntiForgeryAuthCookieNameProvider antiForgeryAuthCookieNameProvider,
IOptionsSnapshot<CookieAuthenticationOptions> namedOptionsAccessor,
ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> logger) ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> logger)
{ {
_antiforgery = antiforgery; _antiforgery = antiforgery;
_antiforgeryOptions = antiforgeryOptions.Value; _antiforgeryOptions = antiforgeryOptions.Value;
_namedOptionsAccessor = namedOptionsAccessor;
_logger = logger; _logger = logger;
_abpAntiForgeryOptions = abpAntiForgeryOptions.Value; _antiForgeryAuthCookieNameProvider = antiForgeryAuthCookieNameProvider;
} }
public async Task OnAuthorizationAsync(AuthorizationFilterContext context) public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
@ -66,11 +62,11 @@ namespace Volo.Abp.AspNetCore.Mvc.AntiForgery
return false; return false;
} }
var cookieAuthenticationOptions = _namedOptionsAccessor.Get(_abpAntiForgeryOptions.AuthorizationCookieName); var authCookieName = _antiForgeryAuthCookieNameProvider.GetNameOrNull();
//Always perform antiforgery validation when request contains authentication cookie //Always perform antiforgery validation when request contains authentication cookie
if (cookieAuthenticationOptions?.Cookie.Name != null && if (authCookieName != null &&
context.HttpContext.Request.Cookies.ContainsKey(cookieAuthenticationOptions.Cookie.Name)) context.HttpContext.Request.Cookies.ContainsKey(authCookieName))
{ {
return true; return true;
} }

Loading…
Cancel
Save