Example #1
0
        public IActionResult RefreshToken(string requestToken)
        {
            var result = _service.ExtractRefreshToken(requestToken);

            if (result.login == null)
            {
                return(BadRequest(result.error));
            }
            else
            {
                var role   = _service.GetRole(result.login);
                var claims = new[]
                {
                    new Claim(ClaimTypes.Name, result.login),
                    new Claim(ClaimTypes.Role, role)
                };

                var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["SecretKey"]));
                var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken
                            (
                    issuer: "Gakko",
                    audience: "Students",
                    claims: claims,
                    expires: DateTime.Now.AddMinutes(10),
                    signingCredentials: credentials
                            );

                var refreshToken = Guid.NewGuid();

                if (_service.RefreshTokenInserted(result.login, refreshToken))
                {
                    return(Ok(new
                    {
                        token = new JwtSecurityTokenHandler().WriteToken(token),
                        refreshToken = refreshToken
                    }));
                }
                else
                {
                    return(BadRequest("Couldn't insert token in DB"));
                }
            }
        }