diff --git a/src/security/authentication/Netmash.Security.Authentication.Tuitio/Netmash.Security.Authentication.Tuitio.csproj b/src/security/authentication/Netmash.Security.Authentication.Tuitio/Netmash.Security.Authentication.Tuitio.csproj index 9bf85ac..31f850c 100644 --- a/src/security/authentication/Netmash.Security.Authentication.Tuitio/Netmash.Security.Authentication.Tuitio.csproj +++ b/src/security/authentication/Netmash.Security.Authentication.Tuitio/Netmash.Security.Authentication.Tuitio.csproj @@ -1,7 +1,7 @@  - net6.0 + net8.0 Netmash.Security.Authentication.Tuitio configures authentication with a Tuitio instance in a .NET environment for a .NET API. https://lab.code-rove.com/gitea/bricks/netmash/src/branch/master/src/security/authentication/Netmash.Security.Authentication.Tuitio https://lab.code-rove.com/gitea/bricks/netmash @@ -13,14 +13,12 @@ README.md Toodle HomeLab Toodle Netmash - 2.2.1 + 2.3.0 - - - - + + diff --git a/src/security/authentication/Netmash.Security.Authentication.Tuitio/ReleaseNotes.txt b/src/security/authentication/Netmash.Security.Authentication.Tuitio/ReleaseNotes.txt index 954847f..6921336 100644 --- a/src/security/authentication/Netmash.Security.Authentication.Tuitio/ReleaseNotes.txt +++ b/src/security/authentication/Netmash.Security.Authentication.Tuitio/ReleaseNotes.txt @@ -1,4 +1,8 @@ -2.2.1 release [2023-04-12 21:54] +2.3.0 release [2025-03-24 02:09] +◾ Tuitio nuget packages upgrade +◾ .NET 8 upgrade + +2.2.1 release [2023-04-12 21:54] ◾ The authentication handler has been updated to skip the token validation if the method from controller is marked with [AllowAnonymous] attribute. ◾ Tuitio nuget packages upgrade ◾ Added authenticated user groups and roles in claims. diff --git a/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/AuthenticationTicketService.cs b/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/AuthenticationTicketService.cs index 9cdb219..811a596 100644 --- a/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/AuthenticationTicketService.cs +++ b/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/AuthenticationTicketService.cs @@ -5,7 +5,7 @@ using System; using System.Linq; using System.Security.Claims; using Tuitio.PublishedLanguage.Dto; -using c = Netmash.Security.Authentication.Tuitio.Constants; +using C = Netmash.Security.Authentication.Tuitio.Constants; namespace Netmash.Security.Authentication.Tuitio.Services { @@ -25,7 +25,7 @@ namespace Netmash.Security.Authentication.Tuitio.Services var claims = new[] { new Claim(ClaimTypes.NameIdentifier, guestId.ToString()), new Claim(ClaimTypes.Name, guestName), - new Claim(c.ClaimTypes.IsAnonymousGuest, bool.TrueString) + new Claim(C.ClaimTypes.IsAnonymousGuest, bool.TrueString) }; var ticket = GetAuthenticationTicket(claims); @@ -41,21 +41,21 @@ namespace Netmash.Security.Authentication.Tuitio.Services { { ClaimTypes.NameIdentifier, authorization.UserId }, { ClaimTypes.Name, authorization.UserName }, - { c.ClaimTypes.UserName, authorization.UserName } + { C.ClaimTypes.UserName, authorization.UserName } }; - claimCollection.TryAddClaim(authorization.FirstName, ClaimTypes.GivenName, c.ClaimTypes.FirstName); - claimCollection.TryAddClaim(authorization.LastName, ClaimTypes.Surname, c.ClaimTypes.LastName); + claimCollection.TryAddClaim(authorization.FirstName, ClaimTypes.GivenName, C.ClaimTypes.FirstName); + claimCollection.TryAddClaim(authorization.LastName, ClaimTypes.Surname, C.ClaimTypes.LastName); claimCollection.TryAddClaim(authorization.Email, ClaimTypes.Email); - claimCollection.TryAddClaim(authorization.UserGroups, c.ClaimTypes.UserGroups); - claimCollection.TryAddClaim(authorization.UserRoles, c.ClaimTypes.UserRoles); + claimCollection.TryAddClaim(authorization.UserGroups, C.ClaimTypes.UserGroups); + claimCollection.TryAddClaim(authorization.UserRoles, C.ClaimTypes.UserRoles); claimCollection.TryAddRange(authorization.Claims, (key, value) => { _logger.LogWarning($"There is already a claim with key {key} in the collection. The combination {key}:{value} will be ignored."); }); - var claims = claimCollection.Select(z => new Claim(z.Key, z.Value.ToString(), z.Value.GetType().Name, c.ClaimIssuer.Tuitio)).ToArray(); + var claims = claimCollection.Select(z => new Claim(z.Key, z.Value.ToString(), z.Value.GetType().Name, C.ClaimIssuer.Tuitio)).ToArray(); var ticket = GetAuthenticationTicket(claims); return ticket; diff --git a/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/UserContextAccessor.cs b/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/UserContextAccessor.cs index f72211b..192de8c 100644 --- a/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/UserContextAccessor.cs +++ b/src/security/authentication/Netmash.Security.Authentication.Tuitio/Services/UserContextAccessor.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Linq; using System.Security.Claims; using Tuitio.PublishedLanguage.Dto; -using c = Netmash.Security.Authentication.Tuitio.Constants; +using C = Netmash.Security.Authentication.Tuitio.Constants; namespace Netmash.Security.Authentication.Tuitio.Services { @@ -27,7 +27,7 @@ namespace Netmash.Security.Authentication.Tuitio.Services { get { - var groups = GetUserClaim>(c.ClaimTypes.UserGroups, false, false); + var groups = GetUserClaim>(C.ClaimTypes.UserGroups, false, false); return groups.ToTuples(); } } @@ -36,12 +36,12 @@ namespace Netmash.Security.Authentication.Tuitio.Services { get { - var roles = GetUserClaim>(c.ClaimTypes.UserRoles, false, false); + var roles = GetUserClaim>(C.ClaimTypes.UserRoles, false, false); return roles.ToTuples(); } } - public bool IsAnonymousGuest => GetUserClaim(c.ClaimTypes.IsAnonymousGuest); + public bool IsAnonymousGuest => GetUserClaim(C.ClaimTypes.IsAnonymousGuest); private T GetUserClaim(string claimType, bool isMandatory = false, bool isPrimitiveType = true, string claimLabel = null) { diff --git a/src/security/authentication/Netmash.Security.Authentication.Tuitio/TuitioAuthenticationHandler.cs b/src/security/authentication/Netmash.Security.Authentication.Tuitio/TuitioAuthenticationHandler.cs index 198ec45..13db360 100644 --- a/src/security/authentication/Netmash.Security.Authentication.Tuitio/TuitioAuthenticationHandler.cs +++ b/src/security/authentication/Netmash.Security.Authentication.Tuitio/TuitioAuthenticationHandler.cs @@ -1,6 +1,6 @@ using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Netmash.Security.Authentication.Tuitio.Abstractions; @@ -9,9 +9,9 @@ using System; using System.Net.Http.Headers; using System.Text.Encodings.Web; using System.Threading.Tasks; -using Tuitio.PublishedLanguage.Dto; using Tuitio.Wrapper.Services; -using c = Netmash.Security.Authentication.Tuitio.Constants; +using C = Netmash.Security.Authentication.Tuitio.Constants; +using Tdto = Tuitio.PublishedLanguage.Dto; namespace Netmash.Security.Authentication.Tuitio { @@ -21,8 +21,8 @@ namespace Netmash.Security.Authentication.Tuitio private readonly IAuthenticationOptions _authenticationOptions; private readonly ILogger _logger; - public TuitioAuthenticationHandler(IOptionsMonitor options, ILoggerFactory loggerFactory, UrlEncoder encoder, ISystemClock clock, ITuitioService tuitioService, IAuthenticationOptions authenticationOptions, ILogger logger) - : base(options, loggerFactory, encoder, clock) + public TuitioAuthenticationHandler(IOptionsMonitor options, ILoggerFactory loggerFactory, UrlEncoder encoder, ITuitioService tuitioService, IAuthenticationOptions authenticationOptions, ILogger logger) + : base(options, loggerFactory, encoder) { _tuitioService = tuitioService; _authenticationOptions = authenticationOptions; @@ -34,9 +34,8 @@ namespace Netmash.Security.Authentication.Tuitio protected override async Task HandleAuthenticateAsync() { // if the method is marked with [AllowAnonymous], the handler will skip token validation. - var endpointFeature = Context.Features.Get(); - var endpoint = endpointFeature?.Endpoint; - if (endpoint?.Metadata.GetMetadata() != null) + var endpoint = Context.GetEndpoint(); + if (endpoint?.Metadata?.GetMetadata() != null) { return AuthenticateResult.NoResult(); } @@ -44,7 +43,8 @@ namespace Netmash.Security.Authentication.Tuitio var token = GetAuthorizationToken(); if (token != null) { - Envelope authorizationEnvelope; + + Tdto.Envelope authorizationEnvelope; try { authorizationEnvelope = await _tuitioService.Authorize(token); @@ -83,9 +83,9 @@ namespace Netmash.Security.Authentication.Tuitio if (_authenticationOptions.AcceptTokenFromQuery && Request.Query.Count > 0 - && Request.Query.ContainsKey(c.QueryParams.Token)) + && Request.Query.ContainsKey(C.QueryParams.Token)) { - var token = Request.Query[c.QueryParams.Token]; + var token = Request.Query[C.QueryParams.Token]; return token.ToString(); } diff --git a/src/test/Netmash.Test.Api/Netmash.Test.Api.csproj b/src/test/Netmash.Test.Api/Netmash.Test.Api.csproj index 0b9dc59..890aae5 100644 --- a/src/test/Netmash.Test.Api/Netmash.Test.Api.csproj +++ b/src/test/Netmash.Test.Api/Netmash.Test.Api.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0