After so many trial and errors I think the base reason for this behavior is mostly for renaming the jwt fields when creating them so I used this line of code before generating the claims:
JwtSecurityTokenHandler.DefaultOutboundClaimTypeMap.Clear();
And now JwtSecurityTokenHandler write tokens and read them with their default names.