예제 #1
0
 private void ConfigureServices(IServiceCollection services)
 {
     services.AddSingleton <IConsole, PxConsole>();
     Pulxer.BL.ConfigureServices(services, _config,
                                 DataProtect.TryUnProtect(_config.GetConnectionString("Pulxer")),
                                 DataProtect.TryUnProtect(_config.GetConnectionString("Leech")));
 }
예제 #2
0
        public string BuildJwtToken(IConfiguration config, User user, out DateTime expTime)
        {
            var    jwtConfig = config.GetSection("JwtToken");
            string key       = DataProtect.TryUnProtect(jwtConfig.GetValue("Key", AuthOptions.KEY));
            string issuer    = jwtConfig.GetValue("Issuer", AuthOptions.ISSUER);
            string audience  = jwtConfig.GetValue("Audience", AuthOptions.AUDIENCE);
            int    lifetime  = jwtConfig.GetValue("Lifetime", AuthOptions.LIFETIME);
            var    now       = DateTime.UtcNow;

            expTime = now.Add(TimeSpan.FromMinutes(lifetime));

            var claims = new List <Claim>
            {
                new Claim(ClaimsIdentity.DefaultNameClaimType, user.UserID.ToString()),
                new Claim(ClaimsIdentity.DefaultRoleClaimType, user.Role)
            };

            var jwt = new JwtSecurityToken(
                issuer: issuer,
                audience: audience,
                notBefore: now,
                claims: claims,
                expires: expTime,
                signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256));

            return(new JwtSecurityTokenHandler().WriteToken(jwt));
        }
예제 #3
0
파일: Startup.cs 프로젝트: vlshl/pulxer
        public void ConfigureServices(IServiceCollection services)
        {
            var    jwtConfig = _config.GetSection("JwtToken");
            string key       = DataProtect.TryUnProtect(jwtConfig.GetValue("Key", AuthOptions.KEY));

            services.AddAuthentication(opt =>
            {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(opt =>
            {
                //opt.RequireHttpsMetadata = _environment.IsProduction();
                opt.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidIssuer              = jwtConfig.GetValue("Issuer", AuthOptions.ISSUER),
                    ValidateAudience         = true,
                    ValidAudience            = jwtConfig.GetValue("Audience", AuthOptions.AUDIENCE),
                    ValidateLifetime         = true,
                    ClockSkew                = TimeSpan.Zero,
                    IssuerSigningKey         = AuthOptions.GetSymmetricSecurityKey(key),
                    ValidateIssuerSigningKey = true
                };
            });

            services.AddControllers();

            string pulxerConnectionString = DataProtect.TryUnProtect(_config.GetConnectionString("Pulxer"));
            string leechConnectionString  = DataProtect.TryUnProtect(_config.GetConnectionString("Leech"));

            Pulxer.BL.ConfigureServices(services, _config, pulxerConnectionString, leechConnectionString);
        }
예제 #4
0
        public async Task Token()
        {
            var username = Request.Form["username"];
            var password = Request.Form["password"];

            var identity = GetIdentity(username, password);

            if (identity == null)
            {
                Response.StatusCode = 400;
                await Response.WriteAsync("Invalid login or password.");

                return;
            }

            var    jwtConfig = _config.GetSection("JwtToken");
            string key       = DataProtect.TryUnProtect(jwtConfig.GetValue("Key", AuthOptions.KEY));
            string issuer    = jwtConfig.GetValue("Issuer", AuthOptions.ISSUER);
            string audience  = jwtConfig.GetValue("Audience", AuthOptions.AUDIENCE);
            int    lifetime  = jwtConfig.GetValue("Lifetime", AuthOptions.LIFETIME);
            var    now       = DateTime.UtcNow;

            var jwt = new JwtSecurityToken(
                issuer: issuer,
                audience: audience,
                notBefore: now,
                claims: identity.Claims,
                expires: now.Add(TimeSpan.FromMinutes(lifetime)),
                signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256));
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

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

            Response.ContentType = "application/json";
            await Response.WriteAsync(JsonConvert.SerializeObject(response,
                                                                  new JsonSerializerSettings {
                Formatting = Formatting.Indented
            }));
        }