Example #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.Configure <StorageSettings>(options =>
            {
                options.AccountName = Configuration.GetSection("SecretSettings:BackupDbStorageAccountName").Value;
                options.AccountKey  = Configuration.GetSection("SecretSettings:BackupDbStorageAccountKey").Value;
            });

            var tokenIssuerSigningKey = Configuration.GetSection("SecretSettings:TokenIssuerSigningKey").Value;

            services.Configure <SecretSettings>(options =>
            {
                options.TokenIssuerSigningKey = tokenIssuerSigningKey;
                options.Salt = Configuration.GetSection("SecretSettings:Salt").Value;;
            });

            services.AddTransient <IRestaurantRepository, LiteDB.RestaurantRepository>();
            services.AddTransient <IUserRepository, UserRepository>();
            services.AddTransient <IBackupDbService, BackupDbService>();

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>
            {
                options.TokenValidationParameters =
                    new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidateAudience         = true,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,

                    ValidIssuer      = "restaurantmap.security.bearer",
                    ValidAudience    = "restaurantmap.security.bearer",
                    IssuerSigningKey = JwtSecurityKey.Create(tokenIssuerSigningKey)
                };
            });

            services.AddAuthorization(options =>
            {
                options.AddPolicy("RestaurantCreate", policy => policy.RequireClaim("RestaurantCreate"));
                options.AddPolicy("UsersManager", policy => policy.RequireClaim("UsersManager"));
                options.AddPolicy("DbManager", policy => policy.RequireClaim("DbManager"));
            });

            services.AddSingleton <IScheduledTask, BackupDbTask>();
            services.AddScheduler((sender, args) =>
            {
                Console.Write(args.Exception.Message);
                args.SetObserved();
            });
        }
        private JwtToken GenerateAccessToken(DbUser user)
        {
            var builder = new JwtTokenBuilder()
                          .AddSecurityKey(JwtSecurityKey.Create(_SecretSettings.Value.TokenIssuerSigningKey))
                          .AddSubject("authentication")
                          .AddIssuer("restaurantmap.security.bearer")
                          .AddAudience("restaurantmap.security.bearer")
                          .AddExpiry(180);

            foreach (Permission permission in user.permissions)
            {
                builder.AddClaim(permission.associatedClaim, "True");
            }
            return(builder.Build());
        }