22 lines
1.0 KiB
C#
22 lines
1.0 KiB
C#
using DigitalData.Core.Security.Config;
|
|
using Microsoft.Extensions.Options;
|
|
using Microsoft.IdentityModel.Tokens;
|
|
using System.IdentityModel.Tokens.Jwt;
|
|
|
|
namespace DigitalData.Core.Security
|
|
{
|
|
public class JwtSignatureService<TPrincipal>(IOptions<ClaimDescriptor<TPrincipal>> claimDescriptorOptions, TokenDescriptorProvider descriptorProvider) : JwtSecurityTokenHandler
|
|
{
|
|
private readonly ClaimDescriptor<TPrincipal> _claimDescriptor = claimDescriptorOptions.Value;
|
|
|
|
public SecurityToken CreateToken(TPrincipal subject, TokenDescription description)
|
|
{
|
|
var descriptor = descriptorProvider.Create(description: description);
|
|
descriptor.Claims = _claimDescriptor.CreateClaims?.Invoke(subject);
|
|
descriptor.Subject = _claimDescriptor.CreateSubject?.Invoke(subject);
|
|
return CreateToken(descriptor);
|
|
}
|
|
|
|
public string CreateAndWriteToken(TPrincipal subject, TokenDescription description) => WriteToken(CreateToken(subject, description));
|
|
}
|
|
} |