예제 #1
0
        public async Task <object> Post(
            [FromBody] AccountApiViewModel usuario,
            [FromServices] SigningConfigurations signingConfigurations,
            [FromServices] TokenConfigurations tokenConfigurations)
        {
            bool credenciaisValidas = false;

            var responde = _mediator.Send(usuario.MapToCommand()).Result as AuthenticationCommandResponse;

            if (responde.Errors.Count() == 0)
            {
                credenciaisValidas = true;
            }

            if (credenciaisValidas)
            {
                ClaimsIdentity identity = new ClaimsIdentity(
                    new GenericIdentity(usuario.UserCode, "Login"),
                    new[] {
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                    new Claim(JwtRegisteredClaimNames.UniqueName, usuario.UserCode)
                }
                    );

                DateTime dataCriacao   = DateTime.Now;
                DateTime dataExpiracao = dataCriacao.AddDays(1) + TimeSpan.FromSeconds(tokenConfigurations.Seconds);

                var handler       = new JwtSecurityTokenHandler();
                var securityToken = handler.CreateToken(new SecurityTokenDescriptor
                {
                    Issuer             = tokenConfigurations.Issuer,
                    Audience           = tokenConfigurations.Audience,
                    SigningCredentials = signingConfigurations.SigningCredentials,
                    Subject            = identity,
                    NotBefore          = dataCriacao,
                    Expires            = null
                });
                var token = handler.WriteToken(securityToken);

                return(new
                {
                    authenticated = true,
                    created = dataCriacao.ToString("yyyy-MM-dd HH:mm:ss"),
                    expiration = dataExpiracao.ToString("yyyy-MM-dd HH:mm:ss"),
                    accessToken = token,
                    message = "OK"
                });
            }
            else
            {
                return(new
                {
                    authenticated = false,
                    message = string.Format("Falha ao autenticar : {0}", responde.Errors.First())
                });
            }
        }
예제 #2
0
        public IActionResult Update([FromBody] AccountApiViewModel vm)
        {
            var result = _ar.Get(UserId);

            vm = _mapper.Map <AccountApiViewModel>(result);
            return(Ok(new ApiResultModel <AccountApiViewModel>
            {
                Data = vm
            }));
        }
예제 #3
0
 public static AuthenticationCommandRequest MapToCommand(this AccountApiViewModel model)
 => new AuthenticationCommandRequest(model.UserCode, model.AccessKey);