private bool verifyPrivateClaims(JwtSecurityToken jwtToken, PrivateClaims privateClaims, JWTOptions options) { RegisteredClaims registeredClaims = options.getAllRegisteredClaims(); PublicClaims publicClaims = options.getAllPublicClaims(); if (privateClaims == null || privateClaims.isEmpty()) { return(true); } string jsonPayload = jwtToken.Payload.SerializeToJson(); Dictionary <string, object> map = null; try { map = JsonConvert.DeserializeObject <Dictionary <string, object> >(jsonPayload); } catch (Exception) { this.error.setError("JW009", "Cannot parse JWT payload"); return(false); } this.counter = 0; bool validation = verifyNestedClaims(privateClaims.getNestedMap(), map, registeredClaims, publicClaims); int pClaimsCount = countingPrivateClaims(privateClaims.getNestedMap(), 0); if (validation && !(this.counter == pClaimsCount)) { return(false); } return(validation); }
private bool validateRegisteredClaims(JwtSecurityToken jwtToken, JWTOptions options) { // Adding registered claims if (options.hasRegisteredClaims()) { RegisteredClaims registeredClaims = options.getAllRegisteredClaims(); List <Claim> registeredC = registeredClaims.getAllClaims(); foreach (Claim registeredClaim in registeredC) { string registeredClaimKey = registeredClaim.getKey(); object registeredClaimValue = registeredClaim.getValue(); if (RegisteredClaimUtils.exists(registeredClaimKey)) { if (!RegisteredClaimUtils.isTimeValidatingClaim(registeredClaimKey)) { if (!RegisteredClaimUtils.validateClaim(registeredClaimKey, (string)registeredClaimValue, 0, jwtToken, this.error)) { return(false); } } else { long customValidationTime = registeredClaims.getClaimCustomValidationTime(registeredClaimKey); //int value = (int)registeredClaimValue; if (!RegisteredClaimUtils.validateClaim(registeredClaimKey, (string)registeredClaimValue, customValidationTime, jwtToken, this.error)) { return(false); } } if (this.HasError()) { return(false); } } else { error.setError("JW002", registeredClaimKey + " wrong registered claim key"); return(false); } } } return(true); }
private JwtPayload doBuildPayload(PrivateClaims privateClaims, JWTOptions options) { JwtPayload payload = new JwtPayload(); // ****START BUILD PAYLOAD****// // Adding private claims List <Claim> privateC = privateClaims.getAllClaims(); foreach (Claim privateClaim in privateC) { if (privateClaim.getNestedClaims() != null) { payload.Add(privateClaim.getKey(), privateClaim.getNestedClaims().getNestedMap()); } else { System.Security.Claims.Claim netPrivateClaim = null; object obj = privateClaim.getValue(); if (obj.GetType() == typeof(string)) { netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), (string)privateClaim.getValue()); } else if (obj.GetType() == typeof(int)) { int value = (int)obj; netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Integer32); } else if (obj.GetType() == typeof(long)) { long value = (long)obj; netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Integer64); } else if (obj.GetType() == typeof(double)) { double value = (double)obj; netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Double); } else if (obj.GetType() == typeof(bool)) { bool value = (bool)obj; netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), value.ToString(), System.Security.Claims.ClaimValueTypes.Boolean); } else { this.error.setError("JW012", "Unrecognized data type"); } //System.Security.Claims.Claim netPrivateClaim = new System.Security.Claims.Claim(privateClaim.getKey(), privateClaim.getValue()); payload.AddClaim(netPrivateClaim); } } // Adding public claims if (options.hasPublicClaims()) { PublicClaims publicClaims = options.getAllPublicClaims(); List <Claim> publicC = publicClaims.getAllClaims(); foreach (Claim publicClaim in publicC) { System.Security.Claims.Claim netPublicClaim = new System.Security.Claims.Claim(publicClaim.getKey(), (string)publicClaim.getValue()); payload.AddClaim(netPublicClaim); } } // Adding registered claims if (options.hasRegisteredClaims()) { RegisteredClaims registeredClaims = options.getAllRegisteredClaims(); List <Claim> registeredC = registeredClaims.getAllClaims(); foreach (Claim registeredClaim in registeredC) { System.Security.Claims.Claim netRegisteredClaim; if (RegisteredClaimUtils.isTimeValidatingClaim(registeredClaim.getKey())) { netRegisteredClaim = new System.Security.Claims.Claim(registeredClaim.getKey(), (string)registeredClaim.getValue(), System.Security.Claims.ClaimValueTypes.Integer32); } else { netRegisteredClaim = new System.Security.Claims.Claim(registeredClaim.getKey(), (string)registeredClaim.getValue()); } payload.AddClaim(netRegisteredClaim); } } // ****END BUILD PAYLOAD****// return(payload); }