Compare commits
	
		
			5 Commits
		
	
	
		
			25b6c7d691
			...
			62a859b44c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 62a859b44c | |||
| 6f02021fe7 | |||
| 526bf5682b | |||
| 9287acf7d2 | |||
| 2efdc6dbfe | 
							
								
								
									
										32
									
								
								Endpoint/Common/Services/Security/DistributedCacheService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								Endpoint/Common/Services/Security/DistributedCacheService.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| using Microsoft.Extensions.Caching.Distributed; | ||||
| using Mirea.Api.Security.Common.Interfaces; | ||||
| using System; | ||||
| using System.Text.Json; | ||||
| using System.Threading; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace Mirea.Api.Endpoint.Common.Services.Security; | ||||
|  | ||||
| public class DistributedCacheService(IDistributedCache cache) : ICacheService | ||||
| { | ||||
|     public async Task SetAsync<T>(string key, T value, TimeSpan? absoluteExpirationRelativeToNow = null, TimeSpan? slidingExpiration = null, CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         var options = new DistributedCacheEntryOptions | ||||
|         { | ||||
|             AbsoluteExpirationRelativeToNow = absoluteExpirationRelativeToNow, | ||||
|             SlidingExpiration = slidingExpiration | ||||
|         }; | ||||
|  | ||||
|         var serializedValue = JsonSerializer.SerializeToUtf8Bytes(value); | ||||
|         await cache.SetAsync(key, serializedValue, options, cancellationToken); | ||||
|     } | ||||
|  | ||||
|     public async Task<T?> GetAsync<T>(string key, CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         var cachedValue = await cache.GetAsync(key, cancellationToken); | ||||
|         return cachedValue == null ? default : JsonSerializer.Deserialize<T>(cachedValue); | ||||
|     } | ||||
|  | ||||
|     public Task RemoveAsync(string key, CancellationToken cancellationToken = default) => | ||||
|         cache.RemoveAsync(key, cancellationToken); | ||||
| } | ||||
							
								
								
									
										34
									
								
								Endpoint/Common/Services/Security/MemoryCacheService.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Endpoint/Common/Services/Security/MemoryCacheService.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| using Microsoft.Extensions.Caching.Memory; | ||||
| using Mirea.Api.Security.Common.Interfaces; | ||||
| using System; | ||||
| using System.Threading; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace Mirea.Api.Endpoint.Common.Services.Security; | ||||
|  | ||||
| public class MemoryCacheService(IMemoryCache cache) : ICacheService | ||||
| { | ||||
|     public Task SetAsync<T>(string key, T value, TimeSpan? absoluteExpirationRelativeToNow = null, TimeSpan? slidingExpiration = null, CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         var options = new MemoryCacheEntryOptions | ||||
|         { | ||||
|             AbsoluteExpirationRelativeToNow = absoluteExpirationRelativeToNow, | ||||
|             SlidingExpiration = slidingExpiration | ||||
|         }; | ||||
|  | ||||
|         cache.Set(key, value, options); | ||||
|         return Task.CompletedTask; | ||||
|     } | ||||
|  | ||||
|     public Task<T?> GetAsync<T>(string key, CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         cache.TryGetValue(key, out T? value); | ||||
|         return Task.FromResult(value); | ||||
|     } | ||||
|  | ||||
|     public Task RemoveAsync(string key, CancellationToken cancellationToken = default) | ||||
|     { | ||||
|         cache.Remove(key); | ||||
|         return Task.CompletedTask; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,17 @@ | ||||
| using Microsoft.Extensions.Caching.Memory; | ||||
| using Mirea.Api.Security.Common.Interfaces; | ||||
| using System; | ||||
| using System.Threading.Tasks; | ||||
|  | ||||
| namespace Mirea.Api.Endpoint.Common.Services.Security; | ||||
|  | ||||
| public class MemoryRevokedTokenService(IMemoryCache cache) : IRevokedToken | ||||
| { | ||||
|     public Task AddTokenToRevokedAsync(string token, DateTimeOffset expiresIn) | ||||
|     { | ||||
|         cache.Set(token, true, expiresIn); | ||||
|         return Task.CompletedTask; | ||||
|     } | ||||
|  | ||||
|     public Task<bool> IsTokenRevokedAsync(string token) => Task.FromResult(cache.TryGetValue(token, out _)); | ||||
| } | ||||
| @@ -32,6 +32,7 @@ | ||||
| 		<ProjectReference Include="..\ApiDto\ApiDto.csproj" /> | ||||
| 		<ProjectReference Include="..\Domain\Domain.csproj" /> | ||||
| 		<ProjectReference Include="..\Persistence\Persistence.csproj" /> | ||||
| 		<ProjectReference Include="..\Security\Security.csproj" /> | ||||
| 	</ItemGroup> | ||||
|  | ||||
| </Project> | ||||
| @@ -26,7 +26,7 @@ public static class DependencyInjection | ||||
|             Secret = configuration["SECURITY_HASH_TOKEN"] | ||||
|         }); | ||||
|  | ||||
|         var lifeTimeLogin = TimeSpan.FromMinutes(int.Parse(configuration["SECURITY_LIFE_TIME_1_FA"]!)); | ||||
|         var lifeTimePreAuthToken = TimeSpan.FromMinutes(int.Parse(configuration["SECURITY_LIFE_TIME_1_FA"]!)); | ||||
|  | ||||
|         services.AddSingleton(provider => | ||||
|         { | ||||
| @@ -34,7 +34,21 @@ public static class DependencyInjection | ||||
|  | ||||
|             return new PreAuthService(cache) | ||||
|             { | ||||
|                 Lifetime = lifeTimeLogin | ||||
|                 Lifetime = lifeTimePreAuthToken | ||||
|             }; | ||||
|         }); | ||||
|  | ||||
|         var lifeTimeRefreshToken = TimeSpan.FromMinutes(int.Parse(configuration["SECURITY_LIFE_TIME_RT"]!)); | ||||
|  | ||||
|         services.AddSingleton(provider => | ||||
|         { | ||||
|             var cacheService = provider.GetRequiredService<ICacheService>(); | ||||
|             var accessTokenService = provider.GetRequiredService<IAccessToken>(); | ||||
|             var revokedTokenService = provider.GetRequiredService<IRevokedToken>(); | ||||
|  | ||||
|             return new AuthService(cacheService, accessTokenService, revokedTokenService) | ||||
|             { | ||||
|                 Lifetime = lifeTimeRefreshToken | ||||
|             }; | ||||
|         }); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user