public async Task <(int, object)> DoAuthenticationAsync(AuthProperties payload) { return(await _cache.GetOrCreateAsync <(int, object)>($"{payload.Username}{payload.Password}", async entry => { entry.AbsoluteExpiration = DateTimeOffset.UtcNow.AddMinutes(50); // Validate username / password Permissions userData = await _db.ChallengeCredentialsAsync(payload.Username, payload.Password); if (userData == null) { var error = new { Error = "Username or password authentication failure." }; return (401, error); } // Generate a new token string token = Convert.ToBase64String(Encoding.ASCII.GetBytes(payload.Username + Guid.NewGuid().ToString())); // Add new memoryCache entry -> Key: token, Value: access arrays SetMemoryCacheEntry(token, userData); return (200, new { Token = token }); })); }
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 username or password."); return; } var now = DateTime.UtcNow; var jwt = new JwtSecurityToken( issuer: AuthProperties.ISSUER, audience: AuthProperties.AUDIENCE, notBefore: now, claims: identity.Claims, expires: now.Add(TimeSpan.FromMinutes(AuthProperties.LIFETIME)), signingCredentials: new SigningCredentials(AuthProperties.GetSymmetricSecurityKey(), 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 })); }
public async virtual Task <ActionResult> AuthenticateUser([FromBody][Required] AuthProperties body) { var response = await authManager.DoAuthenticationAsync(body); return(StatusCode(response.Item1, response.Item2)); }
public ConfigurableUserProvider(IOptions <AuthProperties> properties) { _properties = properties.Value; }