我以前有Microsoft.IdentityModel.Tokens.JWT
的引用,一切正常。
我更新了使用新的System.IdentityModel.Tokens.Jwt
,但现在似乎没有任何效果。它找不到ValidateToken
的{{1}}方法,而JwtSecurityTokenHandler
没有TokenValidationParameters
,AllowedAudience
或SigningToken
属性。
我在这里缺少什么?任何人都可以提供JWT验证的工作样本吗?
我的“旧”代码:
ValidateExpiration
答案 0 :(得分:33)
经过大量的研究和测试后,我终于发现TokenValidationParameters
的某些属性名称已更改,JwtSecurityTokenHandler.ValidateToken()
方法签名也已更改。
所以这里是上述代码的修改后的工作版本。
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();
}
作为参考,JwtSecurityTokenHandler
位于System.IdentityModel.Tokens
命名空间中。不要忘记添加包#34; JSON Web Token Handler For the Microsoft .Net Framework 4.5&#34; (当我写这些行时版本4.0.0)。
希望它可以节省几个小时的搜索你们中的一些人!