示例#1
0
        public static void Register(IServiceCollection services, IConfiguration configuration)
        {
            var signConfiguration = new SignConfigurationToken();

            services.AddSingleton(signConfiguration);

            var tokenConfigure = new TokenConfigurations();

            new ConfigureFromConfigurationOptions <TokenConfigurations>(
                configuration.GetSection(nameof(TokenConfigurations)))
            .Configure(tokenConfigure);

            services.AddSingleton(tokenConfigure);

            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(bearrerOptions =>
            {
                var paramsValidation = bearrerOptions.TokenValidationParameters;
                paramsValidation.ValidateIssuerSigningKey = true;
                paramsValidation.ValidateLifetime         = true;
                paramsValidation.ValidateActor            = true;
                paramsValidation.ValidateAudience         = true;
                paramsValidation.ValidAudience            = tokenConfigure.Audience;
                paramsValidation.ValidIssuer = tokenConfigure.Issuer;
                paramsValidation.ClockSkew   = TimeSpan.Zero;

                paramsValidation.IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenConfigure.SigningKey));
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser().Build());

                auth.AddPolicy("Portal", policy =>
                {
                    policy.RequireAssertion(context =>
                                            context.User.HasClaim(c => c.Type == Constant.EMPRESAID_CLAIM));
                });
            });
            services.AddMemoryCache();
        }
示例#2
0
        public async Task <IActionResult> Login(
            [FromBody] UserViewModel usuario,
            [FromServices] TokenConfigurations tokenConfiguration,
            [FromServices] SignConfigurationToken signinConfiguration,
            [FromServices] IUserAppService usuarioAppService,
            [FromServices] ILoggerAppService loggerService)
        {
            if (usuario is null || !ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var objRetorno = new BaseViewModel <TokenViewModel>();

            var viewModel = _mapper.Map <UserDomain>(usuario);

            var userBase = await usuarioAppService.ValidarUsuarioAsync(viewModel);

            if (userBase != null)
            {
                var identity = new ClaimsIdentity(
                    new GenericIdentity(userBase.Login, "Login"),
                    new[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, userBase.UserId.ToString()),
                    new Claim(JwtRegisteredClaimNames.UniqueName, userBase.Email),
                    new Claim("CompanyId", userBase.CompanyId.ToString())
                }
                    );

                var dateCreate  = DateTime.Now;
                var dateExpired = dateCreate + TimeSpan.FromDays(tokenConfiguration.ExpireIn);

                var handler = new JwtSecurityTokenHandler();

                var securityToken = handler.CreateToken(new SecurityTokenDescriptor
                {
                    Issuer    = tokenConfiguration.Issuer,
                    Audience  = tokenConfiguration.Audience,
                    Subject   = identity,
                    NotBefore = dateCreate,
                    Expires   = dateExpired,

                    SigningCredentials = new SigningCredentials(
                        new SymmetricSecurityKey(
                            Encoding.UTF8.GetBytes(tokenConfiguration.SigningKey)),
                        SecurityAlgorithms.HmacSha256
                        )
                });

                var token = handler.WriteToken(securityToken);
                objRetorno.ObjetoDeRetorno = new TokenViewModel()
                {
                    UsuarioId   = userBase.UserId,
                    Nome        = userBase.Name,
                    Email       = userBase.Email,
                    Autenticado = true,
                    Criacao     = dateCreate,
                    Expira      = dateExpired,
                    Token       = token,
                };
                #region Logger
                loggerService.SaveLoggerSuccess(new domain.core.Entity.Log.LoggerDomain
                {
                    objects = JsonConvert.SerializeObject(objRetorno.ObjetoDeRetorno),
                    token   = objRetorno.ObjetoDeRetorno.Token,
                    userId  = objRetorno.ObjetoDeRetorno.UsuarioId
                });
                #endregion
                return(Ok(objRetorno));
            }

            return(Unauthorized());
        }
示例#3
0
        public async Task <IActionResult> Login(
            [FromBody] UserViewModel usuario,
            [FromServices] TokenConfigurations tokenConfiguration,
            [FromServices] SignConfigurationToken signinConfiguration,
            [FromServices] IUserAppService usuarioAppService)
        {
            #region .::Method logs request
            logsAppService.SaveLog(this.HttpContext.Request.Headers);
            #endregion

            if (usuario is null || !ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var objRetorno = new BaseViewModel <TokenViewModel>();

            var viewModel = _mapper.Map <UserDomain>(usuario);

            var userBase = await usuarioAppService.ValidingUserAsync(viewModel);

            if (userBase != null)
            {
                var identity = new ClaimsIdentity(
                    new GenericIdentity(userBase.Login, "Login"),
                    new[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, userBase.UserId.ToString()),
                    new Claim(JwtRegisteredClaimNames.UniqueName, userBase.Email)
                }
                    );

                var dateCreate  = DateTime.Now;
                var dateExpired = dateCreate + TimeSpan.FromDays(tokenConfiguration.ExpireIn);

                var handler = new JwtSecurityTokenHandler();

                var securityToken = handler.CreateToken(new SecurityTokenDescriptor
                {
                    Issuer    = tokenConfiguration.Issuer,
                    Audience  = tokenConfiguration.Audience,
                    Subject   = identity,
                    NotBefore = dateCreate,
                    Expires   = dateExpired,

                    SigningCredentials = new SigningCredentials(
                        new SymmetricSecurityKey(
                            Encoding.UTF8.GetBytes(tokenConfiguration.SigningKey)),
                        SecurityAlgorithms.HmacSha256
                        )
                });

                var token = handler.WriteToken(securityToken);
                objRetorno.Message = objRetorno.Success == true?message.AUTH_SUCCESS() : message.AUTH_ERROR();

                objRetorno.ObjectReturn = new TokenViewModel()
                {
                    UserId       = userBase.UserId,
                    Name         = userBase.Name,
                    Mail         = userBase.Email,
                    Authenticate = true,
                    CreateAt     = dateCreate,
                    Expires      = dateExpired,
                    Token        = token
                };

                #region .::Methods Logs
                logsAppService.SaveLog(objRetorno);
                #endregion

                return(Ok(objRetorno));
            }

            return(Unauthorized());
        }