From 7f9459f6cf5708445cf61755c950851efa4ae21a Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Thu, 9 Jan 2025 20:30:38 +0100 Subject: [PATCH] =?UTF-8?q?feat(SecurityExtensions):=20Erforderliche=20Wri?= =?UTF-8?q?teToken-Methoden=20=C3=BCber=20Erweiterungen=20anstelle=20der?= =?UTF-8?q?=20Schnittstellenimplementierung=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Security/IJwtSignatureHandler.cs | 8 ------- .../Security/SecurityExtensions.cs | 22 ++++++++++++++++++- .../JwtSignatureHandler.cs | 10 --------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/DigitalData.Core.Abstractions/Security/IJwtSignatureHandler.cs b/DigitalData.Core.Abstractions/Security/IJwtSignatureHandler.cs index 3f9739f..a4b76f9 100644 --- a/DigitalData.Core.Abstractions/Security/IJwtSignatureHandler.cs +++ b/DigitalData.Core.Abstractions/Security/IJwtSignatureHandler.cs @@ -13,13 +13,5 @@ namespace DigitalData.Core.Abstractions.Security SecurityToken CreateToken(TPrincipal subject, string apiRoute); string WriteToken(SecurityToken token); - - string WriteToken(SecurityTokenDescriptor descriptor); - - string WriteToken(TPrincipal subject, IAsymmetricTokenDescriptor descriptor); - - string WriteToken(TPrincipal subject, string issuer, string audience); - - string WriteToken(TPrincipal subject, string apiRoute); } } \ No newline at end of file diff --git a/DigitalData.Core.Abstractions/Security/SecurityExtensions.cs b/DigitalData.Core.Abstractions/Security/SecurityExtensions.cs index 1093aa1..457f365 100644 --- a/DigitalData.Core.Abstractions/Security/SecurityExtensions.cs +++ b/DigitalData.Core.Abstractions/Security/SecurityExtensions.cs @@ -1,10 +1,11 @@ -using System.Security.Cryptography; +using Microsoft.IdentityModel.Tokens; using System.Text; namespace DigitalData.Core.Abstractions.Security { public static class SecurityExtensions { + #region Unique Security Context public static IEnumerable GetByIssuer(this IEnumerable contextes, string issuer) where TUniqueSecurityContext: IUniqueSecurityContext => contextes.Where(c => c.Issuer == issuer); @@ -28,7 +29,9 @@ namespace DigitalData.Core.Abstractions.Security public static bool TryMatch(this IEnumerable contextes, IUniqueSecurityContext lookupContext, out TUniqueSecurityContext context) where TUniqueSecurityContext : IUniqueSecurityContext => contextes.TryGet(lookupContext.Issuer, lookupContext.Audience, out context); + #endregion Unique Security Context + #region De/serilization internal static byte[] Base64ToByte(this string base64String) => Convert.FromBase64String(base64String); internal static string BytesToString(this byte[] bytes) => Encoding.UTF8.GetString(bytes); @@ -39,7 +42,24 @@ namespace DigitalData.Core.Abstractions.Security public static string Decrypt(this IAsymmetricDecryptor decryptor, string data) => decryptor .Decrypt(data.Base64ToByte()).BytesToString(); + #endregion De/serilization + #region Asymmetric Encryptor public static string Encrypt(this IAsymmetricEncryptor encryptor, string data) => encryptor.Encrypt(data.ToBytes()).ToBase64String(); + #endregion Asymmetric Encryptor + + #region Jwt Signature Handler + public static string WriteToken(this IJwtSignatureHandler handler, SecurityTokenDescriptor descriptor) + => handler.WriteToken(handler.CreateToken(descriptor)); + + public static string WriteToken(this IJwtSignatureHandler handler, TPrincipal subject, IAsymmetricTokenDescriptor descriptor) + => handler.WriteToken(handler.CreateToken(subject: subject, descriptor: descriptor)); + + public static string WriteToken(this IJwtSignatureHandler handler, TPrincipal subject, string issuer, string audience) + => handler.WriteToken(handler.CreateToken(subject: subject, issuer: issuer, audience: audience)); + + public static string WriteToken(this IJwtSignatureHandler handler, TPrincipal subject, string apiRoute) + => handler.WriteToken(handler.CreateToken(subject: subject, apiRoute: apiRoute)); + #endregion Jwt Signature Handler } } \ No newline at end of file diff --git a/DigitalData.Core.Security/JwtSignatureHandler.cs b/DigitalData.Core.Security/JwtSignatureHandler.cs index 007bb74..d68cf3f 100644 --- a/DigitalData.Core.Security/JwtSignatureHandler.cs +++ b/DigitalData.Core.Security/JwtSignatureHandler.cs @@ -44,15 +44,5 @@ namespace DigitalData.Core.Security return CreateToken(subject: subject, descriptor: desc); } - - public string WriteToken(SecurityTokenDescriptor descriptor) => WriteToken(CreateToken(descriptor)); - - public string WriteToken(TPrincipal subject, IAsymmetricTokenDescriptor descriptor) - => WriteToken(CreateToken(subject: subject, descriptor: descriptor)); - - public string WriteToken(TPrincipal subject, string issuer, string audience) - => WriteToken(CreateToken(subject: subject, issuer: issuer, audience: audience)); - - public string WriteToken(TPrincipal subject, string apiRoute) => WriteToken(CreateToken(subject: subject, apiRoute: apiRoute)); } } \ No newline at end of file