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!