chore: move CryptoFactory, JwtSignatureHandler and RSAFactory under Services
This commit is contained in:
parent
973a5f1023
commit
875692b578
@ -1,6 +1,5 @@
|
|||||||
using DigitalData.Core.Abstractions.Security;
|
using DigitalData.Core.Abstractions.Security;
|
||||||
using DigitalData.Core.Security.Config;
|
using DigitalData.Core.Security.Config;
|
||||||
using DigitalData.Core.Security.RSAKey;
|
|
||||||
using DigitalData.Core.Security.Services;
|
using DigitalData.Core.Security.Services;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
|
|||||||
@ -1,40 +0,0 @@
|
|||||||
using AutoMapper;
|
|
||||||
using DigitalData.Core.Abstractions.Security;
|
|
||||||
using DigitalData.Core.Security.Config;
|
|
||||||
using Microsoft.Extensions.Options;
|
|
||||||
using Microsoft.IdentityModel.Tokens;
|
|
||||||
using System.IdentityModel.Tokens.Jwt;
|
|
||||||
|
|
||||||
namespace DigitalData.Core.Security
|
|
||||||
{
|
|
||||||
public class JwtSignatureHandler<TPrincipal> : JwtSecurityTokenHandler, IJwtSignatureHandler<TPrincipal>
|
|
||||||
{
|
|
||||||
private readonly ClaimDescriptor<TPrincipal> _claimDescriptor;
|
|
||||||
|
|
||||||
private readonly IMapper _mapper;
|
|
||||||
|
|
||||||
private readonly ICryptoFactory _cryptoFactory;
|
|
||||||
|
|
||||||
public JwtSignatureHandler(IOptions<ClaimDescriptor<TPrincipal>> claimDescriptorOptions, IMapper mapper, ICryptoFactory cryptoFactory)
|
|
||||||
{
|
|
||||||
_claimDescriptor = claimDescriptorOptions.Value;
|
|
||||||
_mapper = mapper;
|
|
||||||
_cryptoFactory = cryptoFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SecurityToken CreateToken(TPrincipal subject, IAsymmetricTokenDescriptor descriptor)
|
|
||||||
{
|
|
||||||
var sDescriptor = _mapper.Map(descriptor);
|
|
||||||
sDescriptor.Claims = _claimDescriptor.CreateClaims?.Invoke(subject);
|
|
||||||
sDescriptor.Subject = _claimDescriptor.CreateSubject?.Invoke(subject);
|
|
||||||
return CreateToken(sDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SecurityToken CreateToken(TPrincipal subject, string issuer, string audience)
|
|
||||||
{
|
|
||||||
var descriptor = _cryptoFactory.TokenDescriptors.Get(issuer: issuer, audience: audience)
|
|
||||||
?? throw new InvalidOperationException($"No or multiple token description found for issuer '{issuer}' and audience '{audience}'.");
|
|
||||||
return CreateToken(subject: subject, descriptor: descriptor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,10 +1,9 @@
|
|||||||
using DigitalData.Core.Abstractions.Security;
|
using DigitalData.Core.Abstractions.Security;
|
||||||
using DigitalData.Core.Security.Config;
|
using DigitalData.Core.Security.Config;
|
||||||
using DigitalData.Core.Security.RSAKey;
|
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
namespace DigitalData.Core.Security;
|
namespace DigitalData.Core.Security.Services;
|
||||||
|
|
||||||
public class CryptoFactory : RSAFactory, ICryptoFactory, IAsymmetricKeyFactory
|
public class CryptoFactory : RSAFactory, ICryptoFactory, IAsymmetricKeyFactory
|
||||||
{
|
{
|
||||||
39
DigitalData.Core.Security/Services/JwtSignatureHandler.cs
Normal file
39
DigitalData.Core.Security/Services/JwtSignatureHandler.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using AutoMapper;
|
||||||
|
using DigitalData.Core.Abstractions.Security;
|
||||||
|
using DigitalData.Core.Security.Config;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using Microsoft.IdentityModel.Tokens;
|
||||||
|
using System.IdentityModel.Tokens.Jwt;
|
||||||
|
|
||||||
|
namespace DigitalData.Core.Security.Services;
|
||||||
|
|
||||||
|
public class JwtSignatureHandler<TPrincipal> : JwtSecurityTokenHandler, IJwtSignatureHandler<TPrincipal>
|
||||||
|
{
|
||||||
|
private readonly ClaimDescriptor<TPrincipal> _claimDescriptor;
|
||||||
|
|
||||||
|
private readonly IMapper _mapper;
|
||||||
|
|
||||||
|
private readonly ICryptoFactory _cryptoFactory;
|
||||||
|
|
||||||
|
public JwtSignatureHandler(IOptions<ClaimDescriptor<TPrincipal>> claimDescriptorOptions, IMapper mapper, ICryptoFactory cryptoFactory)
|
||||||
|
{
|
||||||
|
_claimDescriptor = claimDescriptorOptions.Value;
|
||||||
|
_mapper = mapper;
|
||||||
|
_cryptoFactory = cryptoFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SecurityToken CreateToken(TPrincipal subject, IAsymmetricTokenDescriptor descriptor)
|
||||||
|
{
|
||||||
|
var sDescriptor = _mapper.Map(descriptor);
|
||||||
|
sDescriptor.Claims = _claimDescriptor.CreateClaims?.Invoke(subject);
|
||||||
|
sDescriptor.Subject = _claimDescriptor.CreateSubject?.Invoke(subject);
|
||||||
|
return CreateToken(sDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SecurityToken CreateToken(TPrincipal subject, string issuer, string audience)
|
||||||
|
{
|
||||||
|
var descriptor = _cryptoFactory.TokenDescriptors.Get(issuer: issuer, audience: audience)
|
||||||
|
?? throw new InvalidOperationException($"No or multiple token description found for issuer '{issuer}' and audience '{audience}'.");
|
||||||
|
return CreateToken(subject: subject, descriptor: descriptor);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,8 +1,9 @@
|
|||||||
using DigitalData.Core.Abstractions.Security;
|
using DigitalData.Core.Abstractions.Security;
|
||||||
using DigitalData.Core.Security.Config;
|
using DigitalData.Core.Security.Config;
|
||||||
|
using DigitalData.Core.Security.RSAKey;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
|
|
||||||
namespace DigitalData.Core.Security.RSAKey;
|
namespace DigitalData.Core.Security.Services;
|
||||||
|
|
||||||
public class RSAFactory : IAsymmetricKeyFactory
|
public class RSAFactory : IAsymmetricKeyFactory
|
||||||
{
|
{
|
||||||
Loading…
x
Reference in New Issue
Block a user