首页 > 解决方案 > 我在尝试使用 JWT-ASP.NETCORE 3.1 时遇到 ıdx10653 错误

问题描述

这是我在 .net core 3.1 中尝试使用 jwt 时的错误输出,我什么也得不到。

我正在使用 v3.1.10 版本的软件包,

我在邮递员上发布的数据已正确插入到数据库中。但我无法在邮递员响应行上获取令牌。

我的代码:

 public AccessToken CreateToken(User user, List<OperationClaim> operationClaims)
    {
        var securityKey = SecurityKeyHelper.CreateSecurityKey(_tokenOptions.SecurityKey);
        var signingCredentials = SingingCredentialsHelper.CreateSigningCredentials(securityKey);
        var jwt = CreateJwtSecurityToken(_tokenOptions, user, signingCredentials, operationClaims);
        var jwtSecurityTokenHandler = new JwtSecurityTokenHandler();
        var token = jwtSecurityTokenHandler.WriteToken(jwt);

        return new AccessToken
        {
            Token = token,
            Expiration = _accessTokenExpiration
        };


    }
public IDataResult<AccessToken> CreateAccessToken(User user)
    {
        var claims =_userService.GetClaims(user);
        var accessToken = _tokenHelper.CreateToken(user, claims);
        return new SuccessDataResult<AccessToken>(accessToken, Messages.AccessTokenCreated);

    }



    [HttpPost("register")]
    public ActionResult Register(UserForRegisterDto userForRegisterDto)
    {
        var userExists = _authService.UserExists(userForRegisterDto.Email);
        if (!userExists.Success)
        {
            return BadRequest(userExists.Message);
        }
        var registerResult = _authService.Register(userForRegisterDto, userForRegisterDto.Password);
        var result = _authService.CreateAccessToken(registerResult.Data);
        if (result.Success)
        {
            return Ok(result.Data);
        }
        return BadRequest(result.Message);
    }

我的错误输出是:

System.ArgumentOutOfRangeException: 'IDX10653: The encryption algorithm 'System.String' requires a key size of at least 'System.Int32' bits. Key 'Microsoft.IdentityModel.Tokens.SymmetricSecurityKey', is of size: 'System.Int32'. '

标签: asp.net-corejwtasp.net-core-3.1

解决方案


在签名和生成签名凭证之前,SymmetricSecurityKey 中使用的 SecretKey 长度存在限制。密钥 Secret key 应至少为 128 位,即(16 字节)。

所以你可以试着让你的SecurityKey更长。


推荐阅读