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