Refactor AuthController roles and add check endpoint

- Change AuthController to use IOptions<AuthTokenKeys> for config
- Restrict Logout and new Check endpoints to Sender and Receiver.FullyAuth roles
- Update Logout logic to handle cookie deletion or sign-out based on user role
- Add GET /api/auth/check to verify user role via query param
- Add necessary using statements for new dependencies
This commit is contained in:
2026-02-03 14:54:02 +01:00
parent 2fcea78574
commit a6be907307

View File

@@ -3,17 +3,20 @@ using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using EnvelopeGenerator.API.Models; using EnvelopeGenerator.API.Models;
using EnvelopeGenerator.Domain.Constants;
using System.Net;
using Microsoft.Extensions.Options;
namespace EnvelopeGenerator.API.Controllers; namespace EnvelopeGenerator.API.Controllers;
/// <summary> /// <summary>
/// Controller verantwortlich für die Benutzer-Authentifizierung, einschließlich Anmelden, Abmelden und Überprüfung des Authentifizierungsstatus. /// Controller verantwortlich für die Benutzer-Authentifizierung, einschließlich Anmelden, Abmelden und Überprüfung des Authentifizierungsstatus.
/// </summary> /// </summary>
/// <param name="logger"></param>
[Route("api/[controller]")] [Route("api/[controller]")]
[ApiController] [ApiController]
public partial class AuthController(ILogger<AuthController> logger) : ControllerBase public partial class AuthController(IOptions<AuthTokenKeys> authTokenKeyOptions) : ControllerBase
{ {
private readonly AuthTokenKeys authTokenKeys = authTokenKeyOptions.Value;
/// <summary> /// <summary>
/// Entfernt das Authentifizierungs-Cookie des Benutzers (AuthCookie) /// Entfernt das Authentifizierungs-Cookie des Benutzers (AuthCookie)
@@ -31,14 +34,31 @@ public partial class AuthController(ILogger<AuthController> logger) : Controller
/// <response code="401">Wenn es kein zugelassenes Cookie gibt, wird „nicht zugelassen“ zurückgegeben.</response> /// <response code="401">Wenn es kein zugelassenes Cookie gibt, wird „nicht zugelassen“ zurückgegeben.</response>
[ProducesResponseType(typeof(string), StatusCodes.Status200OK, "text/javascript")] [ProducesResponseType(typeof(string), StatusCodes.Status200OK, "text/javascript")]
[ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)] [ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)]
[Authorize] [Authorize(Roles = $"{Role.Sender},{Role.Receiver.FullyAuth}")]
[HttpPost("logout")] [HttpPost("logout")]
public async Task<IActionResult> Logout() public async Task<IActionResult> Logout()
{ {
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); if (User.IsInRole(Role.Sender))
Response.Cookies.Delete(authTokenKeys.Cookie);
else if (User.IsInRole(Role.Receiver.FullyAuth))
await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
else
return Unauthorized();
return Ok(); return Ok();
} }
/// <summary>
///
/// </summary>
/// <param name="role"></param>
/// <returns></returns>
[ProducesResponseType(typeof(void), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)]
[HttpGet("check")]
[Authorize(Roles = $"{Role.Sender},{Role.Receiver.FullyAuth}")]
public IActionResult Check([FromQuery] string role) => User.IsInRole(role) ? Ok() : Unauthorized();
/// <summary> /// <summary>
/// Prüft, ob der Benutzer ein autorisiertes Token hat. /// Prüft, ob der Benutzer ein autorisiertes Token hat.
/// </summary> /// </summary>