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>
/// Used to find auth cookie when validating Anti Forgery token.
/// Default value: ".AspNet.ApplicationCookie".
/// Default value: ".AspNetCore.Identity.Application".
/// </summary>
public string AuthorizationCookieName { get; set; }
public string AuthCookieName { get; set; }
public AbpAntiForgeryOptions()
{
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 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<CookieAuthenticationOptions> _namedOptionsAccessor;
private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions;
private readonly AbpAntiForgeryAuthCookieNameProvider _antiForgeryAuthCookieNameProvider;
public AbpAutoValidateAntiforgeryTokenAuthorizationFilter(
IAntiforgery antiforgery,
IOptions<AntiforgeryOptions> antiforgeryOptions,
IOptions<AbpAntiForgeryOptions> abpAntiForgeryOptions,
IOptionsSnapshot<CookieAuthenticationOptions> namedOptionsAccessor,
AbpAntiForgeryAuthCookieNameProvider antiForgeryAuthCookieNameProvider,
ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> 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;
}

16
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<CookieAuthenticationOptions> _namedOptionsAccessor;
private readonly AbpAntiForgeryOptions _abpAntiForgeryOptions;
private readonly AbpAntiForgeryAuthCookieNameProvider _antiForgeryAuthCookieNameProvider;
private readonly ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> _logger;
public AbpValidateAntiforgeryTokenAuthorizationFilter(
IAntiforgery antiforgery,
IOptions<AntiforgeryOptions> antiforgeryOptions,
IOptions<AbpAntiForgeryOptions> abpAntiForgeryOptions,
IOptionsSnapshot<CookieAuthenticationOptions> namedOptionsAccessor,
AbpAntiForgeryAuthCookieNameProvider antiForgeryAuthCookieNameProvider,
ILogger<AbpValidateAntiforgeryTokenAuthorizationFilter> 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;
}

Loading…
Cancel
Save