feat(SecurityExtensions): Erforderliche WriteToken-Methoden über Erweiterungen anstelle der Schnittstellenimplementierung hinzugefügt

This commit is contained in:
Developer 02 2025-01-09 20:30:38 +01:00
parent 079f0c69c7
commit 7f9459f6cf
3 changed files with 21 additions and 19 deletions

View File

@ -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);
}
}

View File

@ -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<TUniqueSecurityContext> GetByIssuer<TUniqueSecurityContext>(this IEnumerable<TUniqueSecurityContext> 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<TUniqueSecurityContext>(this IEnumerable<TUniqueSecurityContext> 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<TPrincipal>(this IJwtSignatureHandler<TPrincipal> handler, SecurityTokenDescriptor descriptor)
=> handler.WriteToken(handler.CreateToken(descriptor));
public static string WriteToken<TPrincipal>(this IJwtSignatureHandler<TPrincipal> handler, TPrincipal subject, IAsymmetricTokenDescriptor descriptor)
=> handler.WriteToken(handler.CreateToken(subject: subject, descriptor: descriptor));
public static string WriteToken<TPrincipal>(this IJwtSignatureHandler<TPrincipal> handler, TPrincipal subject, string issuer, string audience)
=> handler.WriteToken(handler.CreateToken(subject: subject, issuer: issuer, audience: audience));
public static string WriteToken<TPrincipal>(this IJwtSignatureHandler<TPrincipal> handler, TPrincipal subject, string apiRoute)
=> handler.WriteToken(handler.CreateToken(subject: subject, apiRoute: apiRoute));
#endregion Jwt Signature Handler
}
}

View File

@ -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));
}
}