Example #1
0
        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 });
            }));
        }
Example #2
0
        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
            }));
        }
Example #3
0
        public async virtual Task <ActionResult> AuthenticateUser([FromBody][Required] AuthProperties body)
        {
            var response = await authManager.DoAuthenticationAsync(body);

            return(StatusCode(response.Item1, response.Item2));
        }
Example #4
0
 public ConfigurableUserProvider(IOptions <AuthProperties> properties)
 {
     _properties = properties.Value;
 }