web-dev-qa-db-ja.com

IDX10603:アルゴリズム:「HS256」では、SecurityKey.KeySizeが「128」ビットより大きい必要があります。報告されたKeySize: '32'。パラメーター名:key.KeySize

私はAsp.Net Core Web APIを使用して、認証を実装していました。 AngularアプリケーションからこのAPIを呼び出しています。しかし、常に以下のエラーが発生します。

IDX10603:アルゴリズム:「HS256」では、SecurityKey.KeySizeが「128」ビットより大きい必要があります。報告されたKeySize: '32'。パラメーター名:key.KeySize

以下はStartup.csファイルのConfigureServicesの私のコードです。

public IServiceProvider ConfigureServices(IServiceCollection services)
            {
                services.AddDbContext<APIContext>(option => option.UseInMemoryDatabase("AngularApp"));

                services.AddCors(options => options.AddPolicy("Cors", builder =>
                {
                    builder.AllowAnyOrigin().
                    AllowAnyMethod().
                    AllowAnyHeader();
                }
                ));

                var signinKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Secret phase"));

                services.AddAuthentication(options =>
                {
                    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                }).AddJwtBearer(cfg =>
                {
                    cfg.RequireHttpsMetadata = false;
                    cfg.SaveToken = true;
                    cfg.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
                    {
                        IssuerSigningKey = signinKey,
                        ValidateAudience = false,
                        ValidateIssuer = false,
                        ValidateLifetime = false,
                        ValidateIssuerSigningKey = true,
                        ValidateActor = false,
                        ClockSkew = TimeSpan.Zero
                    };
                });
                services.AddMvc();

                var serviceProvider = services.BuildServiceProvider();
                return serviceProvider;
            }

そして、私は次のようにコントローラでJwtPackageを使用しています。

JwtPackage CreateJwtToken(User usr)
        {
            var signinKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is my custom Secret key for authnetication"));
            var signInCredentials = new SigningCredentials(signinKey, SecurityAlgorithms.HmacSha256);
            var claims = new Claim[] {
                new Claim(JwtRegisteredClaimNames.Sub,usr.Id)
            };
            var jwt = new JwtSecurityToken(claims: claims, signingCredentials: signInCredentials);
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
            return new JwtPackage() { FirstName = usr.FirstName, Token = encodedJwt };
        }

この問題の修正を手伝っていただけませんか?ありがとうございました。

17
Sibeesh Venu

ああ、それは私の間違いでした。秘密鍵の名前に十分な文字数を提供していませんでした。

サインインキーをこれに変更しました

_var signinKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is my custom Secret key for authnetication"));
_

から、

_var signinKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("Secret phase"));
_

SigningCredentials(signinKey, SecurityAlgorithms.HmacSha256)_の_HmacSha256_は128ビットを超える必要があるため、これで私の問題は解決しました。

46
Sibeesh Venu