validate tokenvalidationparameters example c# validation security jwt identity

c# - validate - tokenvalidationparameters example



JwtSecurityTokenHandler and TokenValidationParameters (1)

Solía ​​tener una referencia a Microsoft.IdentityModel.Tokens.JWT y todo funcionaba bien.

Actualicé para usar el nuevo System.IdentityModel.Tokens.Jwt pero nada parece funcionar ahora. No puede encontrar el método ValidateToken de JwtSecurityTokenHandler y el TokenValidationParameters no tiene AllowedAudience , SigningToken o ValidateExpiration .

¿Que me estoy perdiendo aqui? ¿Alguien puede proporcionar una muestra de trabajo de una validación JWT con esto?

Mi código "antiguo":

private static void ValidateJwt(string jwt) { var handler = new JWTSecurityTokenHandler(); var validationParameters = new Microsoft.IdentityModel.Tokens.JWT.TokenValidationParameters() { AllowedAudience = "https://my-rp.com", //SigningToken = new BinarySecretSecurityToken(Convert.FromBase64String(myBase64Key)), SigningToken = new X509SecurityToken( X509 .LocalMachine .My .Thumbprint .Find("UYTUYTVV99999999999YTYYTYTY88888888", false) .First()), ValidIssuer = "https://my-issuer.com/trust/issuer", ValidateExpiration = true }; try { var principal = handler.ValidateToken(jwt, validationParameters); } catch (Exception e) { Console.WriteLine("{0}/n {1}", e.Message, e.StackTrace); } Console.WriteLine(); }


Después de mucha investigación y pruebas, finalmente encontré que algunos nombres de propiedades para TokenValidationParameters habían cambiado y la firma del método JwtSecurityTokenHandler.ValidateToken() también.

Así que aquí está la versión de trabajo modificada del código anterior.

private static void ValidateJwt(string jwt) { var handler = new JwtSecurityTokenHandler(); var validationParameters = new TokenValidationParameters() { ValidAudience = "https://my-rp.com", IssuerSigningTokens = new List<X509SecurityToken>() { new X509SecurityToken( X509 .LocalMachine .My .Thumbprint .Find("UYTUYTVV99999999999YTYYTYTY88888888", false) .First()) }, ValidIssuer = "https://my-issuer.com/trust/issuer", CertificateValidator = X509CertificateValidator.None, RequireExpirationTime = true }; try { SecurityToken validatedToken; var principal = handler.ValidateToken(jwt, validationParameters, out validatedToken); } catch (Exception e) { Console.WriteLine("{0}/n {1}", e.Message, e.StackTrace); } Console.WriteLine(); }

Y para la referencia, el JwtSecurityTokenHandler vive en el espacio de nombres System.IdentityModel.Tokens . No olvide agregar el paquete " JSON Web Token Handler For Microsoft .Net Framework 4.5 " (versión 4.0.0 en el momento en que escribo estas líneas).

Espero que pueda ahorrar algunas horas de búsqueda para algunos de ustedes!