为了账号安全,请及时绑定邮箱和手机立即绑定

在c#asp.net core web api中创建jwt令牌

在c#asp.net core web api中创建jwt令牌

C#
月关宝盒 2022-10-23 13:29:41
我正在尝试在用户登录后创建 JWT 令牌我正在根据以下项目执行此操作: https ://github.com/CodAffection/JWT-Authentication-with-.Net-Core-Web-API-and-Angular -7/分支机构我的应用程序在字符串上失败var securityToken = tokenHandler.CreateToken(tokenDescriptor);我收到错误内部服务器错误 处理请求时发生未处理的异常。ArgumentOutOfRangeException:IDX10603:解密失败。尝试的键:'[PII 被隐藏]'这是控制器的完整代码   [HttpPost]    [Route("Login")]    //Post: /api/ApplicationUser/Login    public async Task<IActionResult> Login(LoginModel model)    {        //  var user = await _userManager.FindByEmailAsync(model.UserName);        var user = await _userManager.FindByNameAsync(model.UserName);        if (user!=null && await _userManager.CheckPasswordAsync(user, model.Password))        {            var tokenDescriptor = new SecurityTokenDescriptor            {                Subject = new ClaimsIdentity(new Claim[]{                    new Claim("UserID",user.Id.ToString())                }),                //   Expires = DateTime.UtcNow.AddMinutes(5),                Expires = DateTime.UtcNow.AddDays(1),                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_appSettings.key)), SecurityAlgorithms.HmacSha256Signature)            };            var tokenHandler = new JwtSecurityTokenHandler();            var securityToken = tokenHandler.CreateToken(tokenDescriptor);            var token = tokenHandler.WriteToken(securityToken);            return Ok(new { token });           }        else        {            return BadRequest(new { message = "username or password is incorrect." });        }    }我阅读了不同的手册,但找不到问题,而且我的代码与我试图复制的项目完全相同。如果可能,请告诉我以哪种方式挖掘:)
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

你的逻辑是对的!但我认为,您的密钥没有足够的字符来创建访问令牌。只需增加密钥长度,它就可以正常工作。

更新:对于HmacSha256Signature,秘钥长度不小于128位;换句话说,它应该至少有 16 个字符。


查看完整回答
反对 回复 2022-10-23
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

这是我用来构建 jwt 令牌服务器端的代码示例:


 private string BuildToken(User user)

    {

        var userSerialise = JsonConvert.SerializeObject(user);


        var claims = new[] {

            new Claim(ClaimTypes.Email, user.EmailAddress),

            new Claim(ClaimTypes.UserData, userSerialise)

        };


        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));

        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature);


        var token = new JwtSecurityToken(_config["Jwt:Issuer"],

          _config["Jwt:Issuer"],

          claims,

          expires: DateTime.Now.AddMinutes(30), 

          signingCredentials: creds);


        return new JwtSecurityTokenHandler().WriteToken(token);


    }


查看完整回答
反对 回复 2022-10-23
  • 2 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号