private string GetJWTToken(MUserTokenClaimsClass userTokenClaims) { SigningCredentials credentials; { byte[] bytes = System.Text.Encoding.ASCII.GetBytes(GlobalData.Current.Jwt["Key"]); // SecureStringWrapper(KeysJWT[userInfo.AppID])) credentials = new SigningCredentials(new SymmetricSecurityKey(bytes), SecurityAlgorithms.HmacSha256Signature); } JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler(); List <Claim> listClaims = userTokenClaims.GetType() .GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public) .Where(x => x.Name != "Roles") .Select(x => { string typeOfData = ClaimValueTypes.String; switch (x.PropertyType.Name) { case "String": typeOfData = ClaimValueTypes.String; break; case "Int32": typeOfData = ClaimValueTypes.Integer32; break; case "Boolean": typeOfData = ClaimValueTypes.Boolean; break; default: typeOfData = ClaimValueTypes.String; break; } return(new Claim(x.Name, Convert.ToString(x.GetValue(userTokenClaims)), typeOfData)); }).ToList(); foreach (string x in userTokenClaims.Roles) { listClaims.Add(new Claim("Roles", x, ClaimValueTypes.String)); } SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(listClaims), Issuer = GlobalData.Current.Jwt["Issuer"], Expires = DateTime.UtcNow.AddDays(1), Audience = GlobalData.Current.Jwt["Audience"], SigningCredentials = credentials }; SecurityToken sectoken = tokenHandler.CreateToken(tokenDescriptor); return(tokenHandler.WriteToken(sectoken)); }
public ObjectResult Login([FromBody] SMUserCredentials data) { SMGenericResponse response = new SMGenericResponse() { Status = "Success", Message = "Credentials Correct" }; try { SMUserCredentials credentials = data.CleanData(); MCredentialsCheckResultClass result = CheckCredentials(credentials); switch (CastToEnum <HttpStatusCode>(result.Result)) { case HttpStatusCode.BadRequest: { response.Status = "Error"; response.Message = result.Message; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.BadRequest)); } case HttpStatusCode.InternalServerError: { response.Status = "Error"; response.Message = result.Message; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError)); } case HttpStatusCode.Unauthorized: { response.Status = "Error"; response.Message = result.Message; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.Unauthorized)); } case HttpStatusCode.Accepted: { response.Status = "Success"; response.Message = "The user has valid access"; result = SearchUserInfoLDAP(credentials); if (result.Result == null) { response.Status = "Error"; response.Message = result.Message; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError)); } List <string> roles = (List <string>)result.Result; if (roles.Count <= 0) { response.Status = "Error"; response.Message = "The user has no valid access roles to this application"; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.Unauthorized)); } RosterMeta4 rosterMeta4 = dBContext.RosterMeta4.Include(i => i.User).First(f => f.NetworkLogin == credentials.Username); if (!rosterMeta4.Status) { response.Status = "Error"; response.Message = "The user has no access permission due inactivity"; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.Forbidden)); } MUserTokenClaimsClass userTokenClaims = null; try { if (rosterMeta4.User == null) { rosterMeta4.User = new Users() { EmployeeNumber = rosterMeta4.EmployeeNumber, DateFirstLogin = DateTime.Now, DateLastLogin = DateTime.Now }; } else { rosterMeta4.User.DateLastLogin = DateTime.Now; } dBContext.SaveChanges(); roles.AddRange(GetExtraRoles(rosterMeta4)); userTokenClaims = new MUserTokenClaimsClass() { FullName = rosterMeta4.FullName, NetworkLogin = rosterMeta4.NetworkLogin, UserID = rosterMeta4.User.ID, EmployeeNumber = rosterMeta4.EmployeeNumber, EmployeeNumberSup = rosterMeta4.EmployeeNumberSup, ClientIP = Request.HttpContext.Connection.RemoteIpAddress.ToString(), Roles = roles.Distinct().ToList(), TokenV = 1.0 }; } catch (Exception) { response.Status = "Error"; response.Message = "Error fetching App/User extra info from requests"; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError)); } response.Data = GetJWTToken(userTokenClaims); } break; default: { response.Status = "Error"; response.Message = "Internal server error authenticating with Active Directory (Unknow)"; response.Data = null; return(BuildResponseObjectResult(response, (int)HttpStatusCode.InternalServerError)); } } } catch (Exception e) { response.SetErrorInfo(e); } return(BuildResponseObjectResult(response)); }