微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

IDX10503:签名验证失败令牌没有孩子尝试过的键:'System.Text.StringBuilder'

如何解决IDX10503:签名验证失败令牌没有孩子尝试过的键:'System.Text.StringBuilder'

我有以下 JWT 令牌,

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJjbGllbnRpZCIsImF1ZCI6ImNsaWVudGlkIiwic3ViIjoiMTIzIiwiYSI6IjQ1NiIsImlhdCI6MTYyMTc5OTU5OCwiZXhwIjoxNjIxNzk5NjU4fQ.hglbX63zhPwTOsB-zSiOMfxEKl5OaIk6zX1o9-LEhP3nro8fa5_3QyIH7I5971j-xuO1bccX1TOh0kNcQ-ACAg

使用,

    public static string Generatetoken(string key,string a1,string a2)
    {
        var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
        var token = new JwtSecurityToken(
            claims: new Claim[]
            {
            new Claim(JwtRegisteredClaimNames.Iss,"clientid"),new Claim(JwtRegisteredClaimNames.Aud,new Claim(JwtRegisteredClaimNames.Sub,a1),new Claim("a",a2),new Claim(JwtRegisteredClaimNames.Iat,DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString(),ClaimValueTypes.integer64),},//notBefore: new DateTimeOffset(DateTime.Now).DateTime,expires: new DateTimeOffset(DateTime.Now.AddMinutes(1)).DateTime,signingCredentials: new SigningCredentials(securityKey,SecurityAlgorithms.HmacSha512)
        );

        return new JwtSecurityTokenHandler().Writetoken(token);
    }

var key = "Ym7AD3OT2kpuIRcVAXCweYhV64B0Oi9ETAO6XRbqB8LDL3tF4bMk9x/59PljcGbP5v38BSzCjD1VTwuO6iWA8uzDVAjw2fMNfcT2/LyRlMOsynblo3envlivtgHnKkZj6HqRrG5ltgwy5NsCQ7WwwYPkldhlTF+wUYAnq28+QnU=";
// Key is test                
var token = Generatetoken(key,"123","456");

获得令牌后,我正在使用以下代码进行验证,

var key = "Ym7AD3OT2kpuIRcVAXCweYhV64B0Oi9ETAO6XRbqB8LDL3tF4bMk9x/59PljcGbP5v38BSzCjD1VTwuO6iWA8uzDVAjw2fMNfcT2/LyRlMOsynblo3envlivtgHnKkZj6HqRrG5ltgwy5NsCQ7WwwYPkldhlTF+wUYAnq28+QnU=";
// key is test

var hmac = new HMACSHA512(Convert.FromBase64String(key));
var validationParameters = new TokenValidationParameters
            {
                ValidAudience = "clientid",Validissuer = "clientid",IssuerSigningKey = new SymmetricSecurityKey(hmac.Key)
            };
            var tokenHandler = new JwtSecurityTokenHandler();
            return tokenHandler.Validatetoken(token,validationParameters,out var validToken);

但是我遇到了以下错误

IDX10503: Signature validation Failed. Token does not have a kid. Keys tried: 'System.Text.StringBuilder'.
Exceptions caught:
 'System.Text.StringBuilder'.
token: 'System.IdentityModel.Tokens.Jwt.JwtSecurityToken'.

解决方法

问题是这条线,

var hmac = new HMACSHA512(Convert.FromBase64String(key));

我改成,

var hmac = new HMACSHA512(Encoding.UTF8.GetBytes(key));

该错误具有误导性。错误的源代码位于 https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/blob/d6f2b66d788195b50f2b1f700beb497851194c73/src/System.IdentityModel.Tokens.Jwt/JwtSecurityTokenHandler.cs#L1016

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。