Wil*_*lem 7 c# asp.net-mvc jwt
所以整个 JWT 签名和验证对我来说还是很新鲜的。我现在有一个 C# 应用程序,它通过使用 JWT 保护的 API 请求一些信息。奇怪的是,所有其他请求都失败了。所以第一个请求就像一个魅力。我收到了我期望的信息和回复。JWT 验证成功。
我在它之后执行的下一个请求(从 start.inclusion 开始整个过程,获取新的 accesstoken,因为不支持刷新令牌)我收到“idx10503 签名验证失败”。令牌没有孩子'。我无法理解它。JWT.io 调试器表示签名有效。
如果验证失败后我发出新请求(再次启动整个过程),则 JWT 有效。
因此,为了清楚起见,它看起来像这样:
我验证 JWT 并收到错误的部分如下:
try
{
var keyBytes = Convert.FromBase64String(publicKey);
AsymmetricKeyParameter asymmetricKeyParameter = PublicKeyFactory.CreateKey(keyBytes);
RsaKeyParameters rsaKeyParameters = (RsaKeyParameters)asymmetricKeyParameter;
RSAParameters rsaParameters = new RSAParameters
{
Modulus = rsaKeyParameters.Modulus.ToByteArrayUnsigned(),
Exponent = rsaKeyParameters.Exponent.ToByteArrayUnsigned()
};
using (var rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(rsaParameters);
var validationParameters = new TokenValidationParameters()
{
RequireExpirationTime = true,
RequireSignedTokens = true,
ValidateAudience = false,
ValidateIssuer = false,
IssuerSigningKey = new RsaSecurityKey(rsa)
};
var handler = new JwtSecurityTokenHandler();
handler.ValidateToken(jwtToken, validationParameters, out var validatedToken);
}
return validatedToken;
}
catch (Exception e)
{
throw e;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试过将 RSAParameters 放入缓存中并在下一个请求中使用相同的参数是否会产生影响。不幸的是,这使我的情况变得更糟,因为所有接下来的 JWT 验证都失败了。
有谁知道可能会出什么问题吗?
最后通过向validationParameters添加一些参数解决了我的问题;
TryAllIssuerSigningKeys = true,
IssuerSigningKey = new RsaSecurityKey(rsa),
IssuerSigningKeys = new List<SecurityKey>() { new RsaSecurityKey(rsa) }
Run Code Online (Sandbox Code Playgroud)