public UserLoginResponse Login([FromBody] UserLoginRequest request) { try { var user = _userService.Access(request.EmailAddress, request.Password); var claims = new List <Claim> { new Claim("sub", user.Id) }; do { if (!_identitySettings.AdditionalClaims.Any()) { break; } var decryptedData = _userService.GetData(user.Id); if (decryptedData == null) { break; } var additionalClaims = _identitySettings.AdditionalClaims; var userData = JsonConvert.DeserializeObject <User>(decryptedData); foreach (var ac in additionalClaims) { if (!AdditionalClaims.ToUserProperty.ContainsKey(ac)) { continue; } var property = AdditionalClaims.ToUserProperty[ac]; var value = userData.GetType().GetProperty(property)?.GetValue(userData, null)?.ToString(); if (!value.IsNullOrEmpty()) { claims.Add(new Claim(ac, value)); } } } while (false); var roles = user.Roles; if (roles != null) { claims.AddRange(roles.Select(r => new Claim("roles", r))); } var identity = new ClaimsIdentity(JwtBearerDefaults.AuthenticationScheme); identity.AddClaims(claims); HttpContext.User = new ClaimsPrincipal(identity); return(new UserLoginResponse { UserId = user.Id }); } catch (Exception ex) { return(new UserLoginResponse { Success = false, Message = ex.Message }); } }