为什么我会在Asp.Net CORE中得到401未经授权的JWT使用权?

问题描述 投票:1回答:2

我正在尝试使用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方法时,会正确生成令牌,但是,当我尝试转到受限制的方法时...

c# asp.net-core jwt http-status-code-401
2个回答
0
投票

令牌中的key与您在配置中设置的内容不匹配。它们必须完全匹配。


0
投票

[在生成令牌和验证令牌时,请使用相同的对称密钥。从共享的代码中,在生成令牌时,您将签名密钥用作“ 1234 ..”,而在startup.cs中进行验证时,则在使用“ ab de ..”。因此,它抱怨签名无效,因为两个密钥都不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.