有什么方法可以创建密钥大小为512的JWT令牌?和更改AsymmetricSignatureProvider的默认最小大小要求 [英] Any way to create a JWT token with key size 512? and changing default minimum size requirement of AsymmetricSignatureProvider

查看:106
本文介绍了有什么方法可以创建密钥大小为512的JWT令牌?和更改AsymmetricSignatureProvider的默认最小大小要求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我当前遇到以下错误:

IDX10630:"Microsoft.IdentityModel.Tokens.RsaSecurityKey,KeyId:'...',InternalId:'5a946596-9fe6-4c91-8c52-9b140849c7a4".签名不能小于"2048"位.密钥大小:"512"

IDX10630: The 'Microsoft.IdentityModel.Tokens.RsaSecurityKey, KeyId: '...', InternalId: '5a946596-9fe6-4c91-8c52-9b140849c7a4'.' for signing cannot be smaller than '2048' bits. KeySize: '512'

我使用以下方法:

 public string GetIdTokenString(Dictionary<string, string> inputClaims, string privateKey)
        {
            string result = null;
            try
            {
                var tokenHandler = new JwtSecurityTokenHandler();                
                privateKey = privateKey.Replace("-----BEGIN ENCRYPTED PRIVATE KEY-----", String.Empty).Replace("-----END ENCRYPTED PRIVATE KEY-----", String.Empty);
                var privateKeyBytes = Convert.FromBase64String(privateKey);
                byte[] privateKeyPasswordBytes = Encoding.UTF8.GetBytes(mypassword);
                List<Claim> claims = new List<Claim>();
                foreach (var o in inputClaims)
                {                    
                    claims.Add(new Claim(o.Key, o.Value));
                }
                int length = 0;
                RSA rSA = RSA.Create();
                rSA.ImportEncryptedPkcs8PrivateKey(privateKeyPasswordBytes, privateKeyBytes, out length);
                RsaSecurityKey securitykey = new RsaSecurityKey(rSA)
                {
                    KeyId = "......"
                };
                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = new ClaimsIdentity(claims),
                    Expires = DateTime.UtcNow.AddSeconds(60 * 5),
                    Audience = ...,
                    Issuer = .....                   

                };
                tokenDescriptor.SigningCredentials = new SigningCredentials(securitykey, SecurityAlgorithms.RsaSha256Signature);

                var token = tokenHandler.CreateToken(tokenDescriptor);


                if (token != null && token is JwtSecurityToken)
                {
                    result = (token as JwtSecurityToken).RawData;
                }
            }
            catch (Exception ex)
            {
                Logger.Fatal(ex);
            }
            return result;
        }

帖子中提到了一个代码

错误使用密钥长度小于2048的RSA安全密钥创建JWT令牌

但是我无法在.net core 3.1中运行

but I'm not able to run it in .net core 3.1

还有另外一件事是关于 AsymmetricSignatureProvider.DefaultMinimumAsymmetricKeySizeInBitsForSigningMap

One more thing is about over riding value in AsymmetricSignatureProvider.DefaultMinimumAsymmetricKeySizeInBitsForSigningMap

我可以通过任何方式更改特定键的值吗?

Any way i can change value of particular Key?

我尝试过的不起作用的一件事是

One thing i have tried which didn't work is

 var mainclass = typeof(AsymmetricSignatureProvider)
                .GetField(nameof(AsymmetricSignatureProvider.DefaultMinimumAsymmetricKeySizeInBitsForSigningMap), BindingFlags.Public | BindingFlags.Static );
                var field = mainclass.GetValue(null) as Dictionary<string, int>;
                if (field != null)
                {
                    field["RS256"] = 512;
                }

                var mainclass2 = typeof(AsymmetricSignatureProvider).GetField(nameof(AsymmetricSignatureProvider.DefaultMinimumAsymmetricKeySizeInBitsForVerifyingMap), BindingFlags.Public | BindingFlags.Static);
                var field2 = mainclass2.GetValue(null) as Dictionary<string, int>;
                if (field2 != null)
                {
                    field2["RS256"] = 512;
                }

推荐答案

以下是我使用的解决方案

Following is the solution i have used

var mainclass = typeof(AsymmetricSignatureProvider)
                       .GetField(nameof(AsymmetricSignatureProvider.DefaultMinimumAsymmetricKeySizeInBitsForSigningMap), BindingFlags.Public | BindingFlags.Static);
                var field = mainclass.GetValue(null) as Dictionary<string, int>;
                if (field != null)
                {
                    field["RS256"] = 512;

                }

                var mainclass2 = typeof(AsymmetricSignatureProvider).GetField(nameof(AsymmetricSignatureProvider.DefaultMinimumAsymmetricKeySizeInBitsForVerifyingMap), BindingFlags.Public | BindingFlags.Static);
                var field2 = mainclass2.GetValue(null) as Dictionary<string, int>;
                if (field2 != null)
                {
                    field2["RS256"] = 512;
                }

这篇关于有什么方法可以创建密钥大小为512的JWT令牌?和更改AsymmetricSignatureProvider的默认最小大小要求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆