public string GetJwtTokenForUser(User user) { var expiresAt = GetCurrentSeconds + _jwtConfiguration.ExpiryMinutes * 60; var payload = new Dictionary <string, string> { { "iss", _jwtConfiguration.Issuer }, { "aud", _jwtConfiguration.AudienceId }, { "exp", expiresAt.ToString(CultureInfo.InvariantCulture) }, { Claims.UserId, user.Id.ToString() }, { Claims.Role, user.Role.ToString() } }; return(JWT.Encode(payload, _jwtConfiguration.GetAudienceSecretBytes(), Algorithm)); }
public static IServiceCollection AddAuthentication(this IServiceCollection services, IConfiguration configuration) { var jwtConfiguration = new JwtConfiguration(); configuration.GetSection(nameof(JwtConfiguration)).Bind(jwtConfiguration); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = jwtConfiguration.Issuer, ValidateAudience = true, ValidAudience = jwtConfiguration.AudienceId, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(jwtConfiguration.GetAudienceSecretBytes()) }; options.Events = new JwtBearerEvents { OnMessageReceived = context => { var accessToken = context.Request.Query["access_token"]; if (!string.IsNullOrEmpty(accessToken)) { context.Token = accessToken; } return(Task.CompletedTask); } }; }); return(services); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddHttpContextAccessor(); services.AddDbContext <TempoDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Tempo"))); var jwtConfiguration = new JwtConfiguration(); Configuration.GetSection(nameof(JwtConfiguration)).Bind(jwtConfiguration); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = jwtConfiguration.Issuer, ValidateAudience = true, ValidAudience = jwtConfiguration.AudienceId, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(jwtConfiguration.GetAudienceSecretBytes()) }; }); services.AddAuthorization(options => { options.AddPolicy(Policies.Admin, policy => policy.Requirements.Add(new RoleRequirement(Role.Admin))); options.AddPolicy(Policies.Employee, policy => policy.Requirements.Add(new RoleRequirement(Role.Employee))); options.AddPolicy(Policies.RegularUser, policy => policy.Requirements.Add(new RoleRequirement(Role.RegularUser))); }); services.AddSingleton <IAuthorizationHandler, RoleRequirementHandler>(); services.Configure <JwtConfiguration>(Configuration.GetSection(nameof(JwtConfiguration))); services.AddTransient <IClaimProvider, ClaimProvider>(); services.AddTransient <IJwtService, JwtService>(); services.AddTransient <IUserRepository, UserRepository>(); services.AddTransient <IAdminRepository, AdminRepository>(); services.AddTransient <IEmployeeRepository, EmployeeRepository>(); services.AddTransient <IRegularUserRepository, RegularUserRepository>(); services.AddTransient <IGymRepository, GymRepository>(); services.AddTransient <IScheduleRepository, ScheduleRepository>(); services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); options.SerializerSettings.Converters.Add(new StringEnumConverter()); }); services.AddSpaStaticFiles(configuration => { configuration.RootPath = "ClientApp/Build"; }); }
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); services.AddHttpContextAccessor(); services.AddDbContext <SaponjaDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Saponja"))); var jwtConfiguration = new JwtConfiguration(); Configuration.GetSection(nameof(JwtConfiguration)).Bind(jwtConfiguration); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = jwtConfiguration.Issuer, ValidateAudience = true, ValidAudience = jwtConfiguration.AudienceId, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(jwtConfiguration.GetAudienceSecretBytes()) }; }); services.AddAuthorization(options => { options.AddPolicy(Policies.Admin, policy => policy.Requirements.Add(new RoleRequirement(UserRole.Admin))); options.AddPolicy(Policies.Shelter, policy => policy.Requirements.Add(new RoleRequirement(UserRole.Shelter))); }); services.AddSingleton <IAuthorizationHandler, RoleRequirementHandler>(); services.Configure <JwtConfiguration>(Configuration.GetSection(nameof(JwtConfiguration))); services.AddScoped <IClaimProvider, ClaimProvider>(); services.AddScoped <IJwtService, JwtService>(); services.AddScoped <IAccessValidator, AccessValidator>(); services.AddTransient <IUserRepository, UserRepository>(); services.AddTransient <IAdopterRepository, AdopterRepository>(); services.AddTransient <IAnimalRepository, AnimalRepository>(); services.AddTransient <INotificationRepository, NotificationRepository>(); services.AddTransient <IPostRepository, PostRepository>(); services.AddTransient <IShelterRepository, ShelterRepository>(); services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); services.AddSpaStaticFiles(configuration => { configuration.RootPath = "ClientApp/build"; }); services.AddMvc(); services.AddSingleton <EmailConfiguration>(Configuration.GetSection("EmailConfiguration").Get <EmailConfiguration>()); services.AddTransient <IEmailService, EmailService>(); }