This commit is contained in:
2021-06-08 12:26:39 +01:00
parent c21aa5c791
commit c06177732d
57 changed files with 2705 additions and 199 deletions
+9
View File
@@ -59,6 +59,15 @@ namespace Saxonite.Net.Core.Web.Base.App
}
protected void ConfigureServices(ConfigureServicesConfig config)
{
// Authentication service.
// Required to handle 'Forbidden' responses etc.
config.services
.AddAuthentication(options => {
options.DefaultAuthenticateScheme = "forbidScheme";
options.DefaultForbidScheme = "forbidScheme";
options.AddScheme<SaxAuthenticationHandler>("forbidScheme", "Handle Forbidden");
});
// Added to support memory caching of sessions.
config.services.AddMemoryCache();
//config.services.AddDistributedMemoryCache(); - for multiple web servers.
@@ -0,0 +1,6 @@
namespace Saxonite.Net.Core.Web.Base.App
{
internal class SaxyAuthenticationHandler
{
}
}
@@ -0,0 +1,46 @@
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
namespace Saxonite.Net.Core.Web.Base.Middleware
{
//=======================================================================
// Authentication handler required to allow actions to issue Forbid() responses.
// Ref. https://stackoverflow.com/questions/54578426/why-do-i-need-to-set-a-defaultforbidscheme/54587054#54587054
//=======================================================================
public class SaxAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
//-------------------------------------------------------------------
// Data members.
//-------------------------------------------------------------------
public SaxAuthenticationHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) :
base(options, logger, encoder, clock)
{
}
//-------------------------------------------------------------------
protected override Task HandleForbiddenAsync(AuthenticationProperties properties)
{
Context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
return base.HandleForbiddenAsync(properties);
}
//-------------------------------------------------------------------
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
Context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
return AuthenticateResult.NoResult();
}
//-------------------------------------------------------------------
}
//=======================================================================
}