首页 > 解决方案 > 无法使用 JwtSecurityTokenHandler().ValidateToken() 读取 CyrptoJS 生成的 JWT

问题描述

我正在使用 CyrptoJS 生成一个令牌,该令牌在 jwt.io 测试表单中正确编码和解码。使用 HMACSha256。

进程抛出异常:

IDX12709: CanReadToken() returned false. JWT is not well formed: '[PII is hidden]'.
The token needs to be in JWS or JWE Compact Serialization Format. 
(JWS): 'EncodedHeader.EndcodedPayload.EncodedSignature'. 
(JWE): 'EncodedProtectedHeader.EncodedEncryptedKey.EncodedInitializationVector.EncodedCiphertext.EncodedAuthenticationTag'.

在 api 中收到的令牌是:eyAiYWxnIjogIkhTMjU2IiwgInR5cGUIiOiJKV1QifQ==.eyAiYWN0b3IiOiAiam9uZXMiLCAibmFtZSI6ICJDYXNlRWRpdCJ9.JRi5hfqItl2gne1dUJxq1dfgdgJ1zD9xn2aUJopglb

我用来验证令牌的代码是:

public static Boolean ValidateToken(string jwtToken,  string key)
    {
        var securityKey = new SymmetricSecurityKey(Convert.FromBase64String(key));
        var validationParameters = new TokenValidationParameters()
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = securityKey
        };
        SecurityToken validatedToken;
        var claimPrincipal = new JwtSecurityTokenHandler().ValidateToken(jwtToken, validationParameters, out validatedToken);

        return validatedToken.ValidFrom <= DateTime.Now; 
    }

标签: javascriptc#jwt

解决方案


问题出在 CryptoJS 的编码上,这帮助我解决了https://www.jonathan-petitcolas.com/2014/11/27/creating-json-web-token-in-javascript.html我不是 url 编码价值观。删除 =


推荐阅读