Beispiel #1
0
        //Необязательный метод ConfigureServices() регистрирует сервисы, которые используются приложением.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(); // добавляем сервисы CORS
            //string cons = "Server=(localdb)\\mssqllocaldb;Database=OrderBd;Trusted_Connection=True;";
            //// устанавливаем контекст данных
            //services.AddDbContext<TodoContext>(options => options.UseSqlServer(cons));
            services.AddDbContext <TodoContext>(opt =>
                                                opt.UseInMemoryDatabase("MyBd"));

            //https://metanit.com/sharp/aspnet5/23.7.php
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)    //Для установки аутентификации с помощью токенов  в методе ConfigureServices в вызов services.AddAuthentication передается значение JwtBearerDefaults.AuthenticationScheme.
            .AddJwtBearer(options =>                                              //добавляется конфигурация токена.
            {
                options.RequireHttpsMetadata      = false;                        //RequireHttpsMetadata: если равно false, то SSL при отправке токена не используется. Однако данный вариант установлен только дя тестирования. В реальном приложении все же лучше использовать передачу данных по протоколу https.
                options.TokenValidationParameters = new TokenValidationParameters //TokenValidationParameters: параметры валидации токена - сложный объект, определяющий, как токен будет валидироваться. Этот объект в свою очередь имеет множество свойств, которые позволяют настроить различные аспекты валидации токена. Но наиболее важные свойства: IssuerSigningKey - ключ безопасности, которым подписывается токен, и ValidateIssuerSigningKey - надо ли валидировать ключ безопасности. Ну и кроме того, можно установить ряд других свойств, таких как нужно ли валидировать издателя и потребителя токена, срок жизни токена, можно установить название clai
                {
                    // укзывает, будет ли валидироваться издатель при валидации токена
                    ValidateIssuer = true,
                    // строка, представляющая издателя
                    ValidIssuer = AuthOptions.ISSUER,

                    // будет ли валидироваться потребитель токена
                    ValidateAudience = true,
                    // установка потребителя токена
                    ValidAudience = AuthOptions.AUDIENCE,
                    // будет ли валидироваться время существования
                    ValidateLifetime = true,

                    // установка ключа безопасности
                    IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),        //SigningKey,
                    // валидация ключа безопасности
                    ValidateIssuerSigningKey = true,
                };
            });
            services.AddControllers(); // используем контроллеры без представлений

            services.AddScoped <FDeclaration, Function>();
        }
Beispiel #2
0
        public object Token(User user)
        {
            var identity = GetIdentity(user);

            var now = DateTime.UtcNow;

            var jwt = new JwtSecurityToken(
                issuer: AuthOptions.ISSUER,
                audience: AuthOptions.AUDIENCE,
                notBefore: now,
                claims: identity.Claims,
                expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
                signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256));

            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            var response = new {
                accessToken = encodedJwt,
                username    = identity.Name
            };

            return(response);
        }
Beispiel #3
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <ApplicationContext>(options =>
                                                       options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
            services.AddCors();
            services.AddTransient <IImageService, ImageService>();
            services.AddTransient <INotificationService, NotificationService>();
            services.AddTransient <IMessageService, MessageService>();
            services.AddTransient <IChatRoomService, ChatRoomService>();
            services.AddTransient <IEmailService, EmailService>();
            services.AddTransient <IUserTokensService, UserTokensService>();
            services.AddTransient <IUsersService, UsersService>();
            services.AddTransient <ITasksService, TasksService>();
            services.AddTransient <ITopUsersService, TopUsersService>();
            services.AddTransient <ITaskInfoService, TaskInfoService>();
            services.AddTransient <ICommentsService, CommentsService>();
            services.AddTransient <ApplicationContext, ApplicationContext>();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidIssuer              = AuthOptions.ISSUER,
                    ValidateAudience         = true,
                    ValidAudience            = AuthOptions.AUDIENCE,
                    ValidateLifetime         = true,
                    IssuerSigningKey         = AuthOptions.GetSymmetricSecurityKey(),
                    ValidateIssuerSigningKey = true,
                };
                options.Events = new JwtBearerEvents
                {
                    OnMessageReceived = context =>
                    {
                        var accessToken = context.Request.Query["access_token"];

                        var path = context.HttpContext.Request.Path;
                        if (!string.IsNullOrEmpty(accessToken) &&
                            ((path.StartsWithSegments("/chat")) || (path.StartsWithSegments("/notification"))))
                        {
                            context.Token = accessToken;
                        }
                        return(System.Threading.Tasks.Task.CompletedTask);
                    }
                };
            });

            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                                  builder =>
                {
                    builder.WithOrigins("http://localhost:3000",
                                        "https://localhost:44338",
                                        "https://freelanceland.azurewebsites.net",
                                        "https://freelancelandback.azurewebsites.net").AllowAnyHeader()
                    .AllowAnyMethod().AllowCredentials();
                });
            });

            services.AddSignalR(o =>
            {
                o.EnableDetailedErrors = true;
            }
                                );
            services.AddSingleton <IUserIdProvider, CustomUserIdProvider>();
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_0);
            services.AddMvc()
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ContractResolver =
                    new CamelCasePropertyNamesContractResolver();
            });


            InitializeAutomapper(services);
        }