我们有几个测试,生成一个jwt请求来调用服务器来检索令牌。我们有6个测试使用相同的数据对相同的方法进行相同的调用。下面是这个方法:'''
private static string GenerateSignedTokenRequest(
string privateKey,
string privateKeyPass,
string clientID,
string audience,
int lifetime)
{
var jti = Guid.NewGuid().ToString();
var claims = new[]
{
new Claim(JwtRegisteredClaimNames.Jti, jti),
new Claim(JwtRegisteredClaimNames.Sub, clientID),
};
var decodedKey = DecodeRsaPrivateKeyFromPem(
privateKey,
privateKeyPass);
var priDecKey = decodedKey.Private as RsaPrivateCrtKeyParameters;
var rsaParams = DotNetUtilities.ToRSAParameters(priDecKey);
using (var rsa = RSA.Create(rsaParams))
{
var token = new JwtSecurityToken(
clientID,
audience,
claims,
DateTime.Now.AddMinutes(-1),
DateTime.Now.AddSeconds(lifetime),
new SigningCredentials(
new RsaSecurityKey(rsa),
SecurityAlgorithms.RsaSha256));
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
'''
我们在WriteToken(token)方法上运行的每一个其他测试都会得到以下错误:{"无法访问一个已处理的对象.\r\nObject名称:'RSA'."}。
令人费解的是,每个奇数测试都能顺利通过这段代码,但每个偶数测试都失败了。但当我分别重新运行每个测试时,它们都是绿色的。只有当我把它们一起运行时,其他每个测试才会失败。
当我从.Net Core和测试框架从3.1.0转移到3.1.4时,这种情况就发生了。
所以看来问题是Windows Azure Active Directory IdentityModel Extensions for .Net的升级。似乎有一个缓存,而不是通过在RSA.Create()方法周围放置一个using来影响。通过删除使用所有的测试是绿色的。
而且。
https:/github.comAzureADazure-activedirectory-identitymodel-extensions-for-dotnetissues1433。