feat(JwtSignatureHandler): Unterstützung für die Erstellung von Token durch den Routenwert der Tokenbeschreibung hinzugefügt.

This commit is contained in:
Developer 02 2025-01-07 09:30:33 +01:00
parent 592b949f57
commit d17c5ca6cd
2 changed files with 17 additions and 1 deletions

View File

@ -8,6 +8,8 @@ namespace DigitalData.Core.Security.Config
/// </summary> /// </summary>
public class TokenDescription : IUniqueSecurityContext public class TokenDescription : IUniqueSecurityContext
{ {
public string? ApiRoute { get; init; }
/// <summary> /// <summary>
/// Gets or sets the value of the 'audience' claim. /// Gets or sets the value of the 'audience' claim.
/// </summary> /// </summary>

View File

@ -36,7 +36,7 @@ namespace DigitalData.Core.Security
public SecurityToken CreateToken(TPrincipal subject, string issuer, string audience) public SecurityToken CreateToken(TPrincipal subject, string issuer, string audience)
{ {
var description = _tokenDescriptions?.Get(issuer: issuer, audience: audience) var description = _tokenDescriptions?.Get(issuer: issuer, audience: audience)
?? throw new InvalidOperationException($"No token description found for issuer '{issuer}' and audience '{audience}'."); ?? throw new InvalidOperationException($"No or multiple token description found for issuer '{issuer}' and audience '{audience}'.");
description.SigningCredentials = _cryptHandler.Decryptors description.SigningCredentials = _cryptHandler.Decryptors
.Get(issuer: issuer, audience: audience) .Get(issuer: issuer, audience: audience)
@ -45,10 +45,24 @@ namespace DigitalData.Core.Security
return CreateToken(subject: subject, description: description); return CreateToken(subject: subject, description: description);
} }
public SecurityToken CreateToken(TPrincipal subject, string apiRoute)
{
var description = _tokenDescriptions?.SingleOrDefault(description => description.ApiRoute == apiRoute)
?? throw new InvalidOperationException($"No or multiple token description found for api route '{apiRoute}'.");
description.SigningCredentials = _cryptHandler.Decryptors
.Get(issuer: description.Issuer, audience: description.Audience)
.CreateSigningCredentials(algorithm: description.SigningAlgorithm, digest: description.SigningDigest);
return CreateToken(subject: subject, description: description);
}
public string WriteToken(SecurityTokenDescriptor descriptor) => WriteToken(CreateToken(descriptor)); public string WriteToken(SecurityTokenDescriptor descriptor) => WriteToken(CreateToken(descriptor));
public string WriteToken(TPrincipal subject, TokenDescription description) => WriteToken(CreateToken(subject: subject, description: description)); public string WriteToken(TPrincipal subject, TokenDescription description) => WriteToken(CreateToken(subject: subject, description: description));
public string WriteToken(TPrincipal subject, string issuer, string audience) => WriteToken(CreateToken(subject: subject, issuer: issuer, audience: audience)); 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));
} }
} }