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

查看:7
本文介绍了有什么方法可以创建密钥大小为 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天全站免登陆