Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        // 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";
            });
        }
Esempio n. 4
0
        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>();
        }