//Необязательный метод 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>(); }
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); }
// 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); }