public async Task <AccessTokenDTO> SignIn(SignInCredentialsDTO dto) { var result = await GenerateAccessToken(dto.Username, dto.Password); var res = _httpContext.HttpContext.Response; res.Headers.Append("Set-Cookie", result.AccessTokenSourceCookie); res.Headers.Append("Set-Cookie", result.RefreshTokenSourceCookie); return(result); }
public Task <AccessTokenDTO> SignIn(SignInCredentialsDTO dto) { var isUser = dto.Username == "user" && dto.Password == "pass"; var isAdmin = dto.Username == "admin" && dto.Password == "pass"; if (!isUser && !isAdmin) { throw new ApiSecurityException(ApiSecurityErrors.AuthenticationError); } var claims = new[] { new Claim(ClaimTypes.Upn, dto.Username), new Claim("name", isUser ? "System User" : "System Administrator"), new Claim("display_name", isUser ? "System User" : "System Administrator"), new Claim(ClaimTypes.Email, isUser ? "*****@*****.**" : "*****@*****.**"), new Claim("photo", "https://static.wixstatic.com/media/a2d517_b155553cfec248378a8b6d73c7c17d5e~mv2.png/v1/fill/w_573,h_469/Focus%20bc%20favicon.png"), new Claim(ClaimTypes.Role, isUser ? "Users" : "Admins"), }; // Generates the Token var securityKey = new SymmetricSecurityKey(Encoding.Default.GetBytes(_settings.Secret)); var signingCredentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var tokenHandler = new JwtSecurityTokenHandler(); var tokenDescription = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(claims), Issuer = _settings.Issuer, Audience = _settings.Issuer, Expires = DateTime.Now.AddSeconds(_settings.Expiration * 3600), IssuedAt = DateTime.Now, SigningCredentials = signingCredentials }; var securityToken = tokenHandler.CreateToken(tokenDescription); var accessToken = tokenHandler.WriteToken(securityToken); // Write a cookie with the access token var options = new CookieOptions(); options.Expires = DateTimeOffset.Now.AddHours(_settings.Expiration); options.HttpOnly = true; _httpContext.Response.Cookies.Append("Authorization", accessToken, options); return(Task.FromResult(new AccessTokenDTO() { AccessToken = accessToken })); }