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)); }