J'avais l'habitude d'avoir une référence à Microsoft.IdentityModel.Tokens.JWT
et tout fonctionnait bien.
J'ai mis à jour pour utiliser le nouveau System.IdentityModel.Tokens.Jwt
mais rien ne semble fonctionner maintenant. Il ne peut pas trouver la méthode ValidateToken
des JwtSecurityTokenHandler
et les TokenValidationParameters
n'ont pas de propriétés AllowedAudience
, SigningToken
ou ValidateExpiration
.
Qu'est-ce que j'oublie ici? Quelqu'un peut-il fournir un échantillon de travail d'une validation JWT avec cela?
Mon "ancien" code:
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();
}
Après beaucoup de recherches et de tests, j'ai finalement trouvé que certains noms de propriétés pour TokenValidationParameters
avaient changé et la signature de la méthode JwtSecurityTokenHandler.ValidateToken()
aussi.
Voici donc la version de travail modifiée du code ci-dessus.
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();
}
Et pour référence, le JwtSecurityTokenHandler
vit dans le System.IdentityModel.Tokens
espace de noms. N'oubliez pas d'ajouter le package " Gestionnaire de jetons Web JSON pour Microsoft .Net Framework 4.5 " (version 4.0.0 au moment où j'écris ces lignes).
J'espère que cela peut sauver quelques heures de recherche pour certains d'entre vous!