2017-11-14 3 views
3

Ich habe gerade mit Asp.Net Core Web API gearbeitet und Authentifizierung implementiert. Und ich rufe diese API von einer Angular-Anwendung. Aber ich bekomme immer einen Fehler wie unten.IDX10603: Der Algorithmus: 'HS256' erfordert, dass der SecurityKey.KeySize größer als '128' Bits ist. KeySize berichtete: "32". Parametername: key.KeySize

IDX10603: Der Algorithmus: 'HS256' erfordert, dass der SecurityKey.KeySize größer als '128' Bits ist. KeySize berichtete: "32". Parametername: key.KeySize

Unten ist mein Code für ConfigureServices in Startup.cs Datei.

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; 
      } 

Und ich verwende JwtPackage in meinem Controller wie folgt.

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 }; 
     } 

Können Sie mir bitte helfen, dieses Problem zu beheben? Vielen Dank.

Antwort

7

Ah, es war mein Fehler, ein einfacher. Ich habe nicht genügend Zeichen für den geheimen Schlüsselnamen zur Verfügung gestellt.

ich meine signinkey zu diesem geändert,

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

aus,

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

Das ist mein Problem gelöst, da die HmacSha256 in der Linie SigningCredentials(signinKey, SecurityAlgorithms.HmacSha256) sollte als 128 Bits größer sein.

Verwandte Themen