using AutoMapper; 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 : JwtSecurityTokenHandler { private readonly ClaimDescriptor _claimDescriptor; private readonly IMapper _mapper; public JwtSignatureService(IOptions> claimDescriptorOptions, IMapper mapper) { _claimDescriptor = claimDescriptorOptions.Value; _mapper = mapper; } public SecurityToken CreateToken(TPrincipal subject, TokenDescription description) { var descriptor = _mapper.Map(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)); } }