私は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 };
}
この問題の修正を手伝っていただけませんか?ありがとうございました。
ああ、それは私の間違いでした。秘密鍵の名前に十分な文字数を提供していませんでした。
サインインキーをこれに変更しました
_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ビットを超える必要があるため、これで私の問題は解決しました。