Compare commits

..

2 Commits

Author SHA1 Message Date
max
b3763fb795 [WIP] Start impl auth handler 2025-05-18 01:01:07 +02:00
max
c225576c44 [WIP] Update AuthenticationService info 2025-05-18 00:35:04 +02:00
3 changed files with 18 additions and 19 deletions

View File

@ -1,4 +1,3 @@
using System.Security.Claims;
using System.Text.Json; using System.Text.Json;
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -8,14 +7,13 @@ namespace DotBased.AspNet.Authority.Controllers;
[ApiController] [ApiController]
[Route("[controller]")] [Route("[controller]")]
public class AuthorityController : ControllerBase public class AuthorityController(IAuthenticationService authenticationService) : ControllerBase
{ {
[HttpGet("auth/login")] [HttpGet("auth/login")]
[AllowAnonymous] [AllowAnonymous]
public async Task<ActionResult> LoginFromSchemeAsync([FromQuery(Name = "s")] string? scheme) public async Task<ActionResult> LoginFromSchemeAsync([FromQuery(Name = "s")] string? scheme, [FromQuery(Name = "ss")] string? sessionScheme)
{ {
var cPrincipal = new ClaimsPrincipal(); await authenticationService.AuthenticateAsync(HttpContext, scheme);
await HttpContext.SignInAsync(cPrincipal);
return Ok(); return Ok();
} }

View File

@ -14,20 +14,13 @@ namespace DotBased.AspNet.Authority.Handlers;
public class AuthorityLoginAuthenticationHandler(IOptionsMonitor<AuthorityLoginOptions> options, public class AuthorityLoginAuthenticationHandler(IOptionsMonitor<AuthorityLoginOptions> options,
ILoggerFactory logger, ILoggerFactory logger,
UrlEncoder encoder, UrlEncoder encoder,
AuthorityManager manager) : SignInAuthenticationHandler<AuthorityLoginOptions>(options, logger, encoder) AuthorityManager manager) : AuthenticationHandler<AuthorityLoginOptions>(options, logger, encoder)
{ {
protected override Task<AuthenticateResult> HandleAuthenticateAsync() // Validate credentials
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{ {
throw new NotImplementedException(); var ticket = new AuthenticationTicket(new ClaimsPrincipal(), Scheme.Name);
} var result = AuthenticateResult.Success(ticket);
return result;
protected override Task HandleSignOutAsync(AuthenticationProperties? properties)
{
throw new NotImplementedException();
}
protected override Task HandleSignInAsync(ClaimsPrincipal user, AuthenticationProperties? properties)
{
throw new NotImplementedException();
} }
} }

View File

@ -20,27 +20,35 @@ public class AuthorityAuthenticationService(
public IReadOnlyCollection<SchemeInfo> GetSchemeInfos(SchemeType schemeType) => _options.SchemeInfoMap.Where(s => s.Type == schemeType).ToList(); public IReadOnlyCollection<SchemeInfo> GetSchemeInfos(SchemeType schemeType) => _options.SchemeInfoMap.Where(s => s.Type == schemeType).ToList();
public IReadOnlyCollection<SchemeInfo> GetAllSchemeInfos() => _options.SchemeInfoMap; public IReadOnlyCollection<SchemeInfo> GetAllSchemeInfos() => _options.SchemeInfoMap;
// Validate credentials
// Used internally by ASP.NET Core to determine if a user is authenticated. Can also be called manually to inspect authentication status.
public override Task<AuthenticateResult> AuthenticateAsync(HttpContext context, string? scheme) public override Task<AuthenticateResult> AuthenticateAsync(HttpContext context, string? scheme)
{ {
return base.AuthenticateAsync(context, scheme); return base.AuthenticateAsync(context, scheme);
} }
// Trigger login
// Used when access to a resource requires authentication, but the user has not provided valid credentials.
public override Task ChallengeAsync(HttpContext context, string? scheme, AuthenticationProperties? properties) public override Task ChallengeAsync(HttpContext context, string? scheme, AuthenticationProperties? properties)
{ {
return base.ChallengeAsync(context, scheme, properties); return base.ChallengeAsync(context, scheme, properties);
} }
// Log user in, set cookie/token
// Called after successfully validating user credentials (e.g., after login form submission), to establish an authenticated session.
public override Task SignInAsync(HttpContext context, string? scheme, ClaimsPrincipal principal, AuthenticationProperties? properties) public override Task SignInAsync(HttpContext context, string? scheme, ClaimsPrincipal principal, AuthenticationProperties? properties)
{ {
return base.SignInAsync(context, scheme, principal, properties); return base.SignInAsync(context, scheme, principal, properties);
} }
// Log out user and end auth session, remove cookie/token
public override Task SignOutAsync(HttpContext context, string? scheme, AuthenticationProperties? properties) public override Task SignOutAsync(HttpContext context, string? scheme, AuthenticationProperties? properties)
{ {
return base.SignOutAsync(context, scheme, properties); return base.SignOutAsync(context, scheme, properties);
} }
// Deny access, return 403/return forbid page
// Used when a user is authenticated but lacks required roles/claims/permissions.
public override Task ForbidAsync(HttpContext context, string? scheme, AuthenticationProperties? properties) public override Task ForbidAsync(HttpContext context, string? scheme, AuthenticationProperties? properties)
{ {
return base.ForbidAsync(context, scheme, properties); return base.ForbidAsync(context, scheme, properties);