feat(JwtSignatureHandler): Unterstützung für die Erstellung von Token durch den Routenwert der Tokenbeschreibung hinzugefügt.
This commit is contained in:
parent
592b949f57
commit
d17c5ca6cd
@ -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>
|
||||||
|
|||||||
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user