예제 #1
0
        public LoginResponseDto Login(UserReadDto user)
        {
            ClaimsIdentity identity = GetIdentity(user);

            DateTime now = DateTime.UtcNow;

            JwtSecurityToken jwt = new JwtSecurityToken(
                issuer: _authConfigsManager.GetIssuer(),
                audience: _authConfigsManager.GetAudience(),
                notBefore: now,
                claims: identity.Claims,
                expires: now.Add(TimeSpan.FromMinutes(_authConfigsManager.GetLifetime())),
                signingCredentials: new SigningCredentials(_authConfigsManager.GetSymmetricSecurityKey(),
                                                           SecurityAlgorithms.HmacSha256));
            string encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            return(new LoginResponseDto
            {
                AccessToken = encodedJwt
            });
        }
예제 #2
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <UserContext>(opt => opt.UseSqlServer
                                                    (Configuration.GetConnectionString("UserManagerApiConnection")).EnableSensitiveDataLogging());

            services.AddControllers().AddNewtonsoftJson(s =>
            {
                s.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
            });

            services.AddScoped <AuthConfigsManager>();
            ServiceProvider    serviceProvider    = services.BuildServiceProvider();
            AuthConfigsManager authConfigsManager = serviceProvider.GetService <AuthConfigsManager>();

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = true,
                    ValidIssuer    = authConfigsManager.GetIssuer(),

                    ValidateAudience = true,
                    ValidAudience    = authConfigsManager.GetAudience(),
                    ValidateLifetime = true,

                    IssuerSigningKey         = authConfigsManager.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")))
                        {
                            context.Token = accessToken;
                        }
                        return(Task.CompletedTask);
                    }
                };
            });

            services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

            services.AddScoped <IUserRepository, UserRepository>();
            services.AddScoped <IUserService, UserService>();
            services.AddScoped <IAuthService, AuthService>();

            services.AddSignalR();

            services.AddCors(options => options.AddPolicy("CorsPolicy",
                                                          builder =>
            {
                builder.AllowAnyMethod().AllowAnyHeader()
                .WithOrigins("http://127.0.0.1:5500/websocket.html");          //.AllowCredentials();//AllowAnyOrigin();
            }));
        }