我正在尝试使用JsonWebTokens(JWT)在Asp.net CORE中进行用户身份验证。当我在应用程序中运行login方法时,会正确生成令牌,但是,当我尝试使用方法时受[授权]限制,我收到401未经授权的错误。“承载者错误= \” invalid_token \“,error_description = \”签名无效\“
这是我在启动时在configureservices中进行配置的方式>>
{ x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(x => { var key = Encoding.ASCII.GetBytes("asdwda1d8a4sd8w4das8d*w8d*asd@#"); var signingKey = new SymmetricSecurityKey(key); x.RequireHttpsMetadata = false; x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuerSigningKey = true, IssuerSigningKey = signingKey, ValidAudience = "Audience", ValidIssuer= "Issuer", ValidateIssuer = false, ValidateAudience = false }; });
这就是我在启动时在配置中配置的方式>>
app.UseAuthentication();
这是loginController中的令牌生成
var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim("UserID", login.IdUsuario.ToString()) }), Expires = DateTime.UtcNow.AddDays(1), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes("1234567890123456")), SecurityAlgorithms.HmacSha256Signature) }; var tokenHandler = new JwtSecurityTokenHandler(); var securityToken = tokenHandler.CreateToken(tokenDescriptor); var token = tokenHandler.WriteToken(securityToken); return Ok( new { token } );
这是我限制的类,与拒绝访问相同
[HttpGet] [Authorize] [Route("Profile")] public IActionResult Profile() { string userID = User.Claims.First(c => c.Type == "UserID").Value; var resultado = _UsuarioServicio.Profile(int.Parse(userID)); return Ok(resultado); }
我正在与邮递员进行测试,并且已经添加了相应的标题。
非常感谢您抽出宝贵的时间查看此内容!
我正在尝试使用JsonWebTokens(JWT)在Asp.net CORE中进行用户身份验证。当我在应用程序中运行login方法时,会正确生成令牌,但是,当我尝试转到受限制的方法时...
令牌中的key
与您在配置中设置的内容不匹配。它们必须完全匹配。
[在生成令牌和验证令牌时,请使用相同的对称密钥。从共享的代码中,在生成令牌时,您将签名密钥用作“ 1234 ..”,而在startup.cs中进行验证时,则在使用“ ab de ..”。因此,它抱怨签名无效,因为两个密钥都不匹配。