RSA处置对象错误------每一个其他测试

问题描述 投票:0回答:1

我们有几个测试,生成一个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时,这种情况就发生了。

在这里输入图像描述

c# .net-core jwt rsa
1个回答
0
投票

所以看来问题是Windows Azure Active Directory IdentityModel Extensions for .Net的升级。似乎有一个缓存,而不是通过在RSA.Create()方法周围放置一个using来影响。通过删除使用所有的测试是绿色的。

这里有几个链接,帮助我诊断。https:/github.comAzureADazure-activedirectory-identitymodel-extensions-for-dotnetissues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc。

而且。

https:/github.comAzureADazure-activedirectory-identitymodel-extensions-for-dotnetissues1433。

© www.soinside.com 2019 - 2024. All rights reserved.