MyBookmark/Modules.User.Application/ServiceCollectionExtensions.cs
THE_KONDRAT 7b16d72329 ui and login
mongo => postgres
2024-11-03 16:08:39 +03:00

48 lines
1.9 KiB
C#

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using Modules.User.Application.Settings;
using Modules.User.Domain.Gateways;
using System.Text;
namespace Modules.User.Application
{
public static class ServiceCollectionExtensions
{
public static IServiceCollection AddTokens(this IServiceCollection services, IConfigurationManager configuration, string jwtSettingsSection)
{
//Configuration
services.AddOptions<JwtSettings>().Bind(configuration.GetSection(jwtSettingsSection));
services.AddHttpContextAccessor();
services.AddScoped<IPasswordHasher, PasswordHasher>();
services.AddScoped<IPasswordGateway, PasswordHasher>();
services.AddScoped<TokenGenerator>();
services.AddScoped<IRefreshTokenGateway, TokenGenerator>();
services.AddScoped<UserContext>();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
{
options.RequireHttpsMetadata = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = configuration.GetValue<string>("JwtSettings:Issuer"),
ValidateAudience = true,
ValidAudience = configuration.GetValue<string>("JwtSettings:Audience"),
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration.GetValue<string>("JwtSettings:SecurityKey")!)),
ValidateIssuerSigningKey = true
};
});
services.AddAuthorization();
return services;
}
}
}