javascript - 无法使用 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;
}
解决方案
问题出在 CryptoJS 的编码上,这帮助我解决了https://www.jonathan-petitcolas.com/2014/11/27/creating-json-web-token-in-javascript.html我不是 url 编码价值观。删除 =
推荐阅读
- java - 如何从 Spotify API 获取访问令牌?[爪哇]
- laravel - Laravel 7 - Eloquent ORM 在使用一对一关系时从 2 个表中获取数据
- android - ViewPager2:监听 setCurrentItem() 完成
- java - 指令被跳过,这里有没有我没有看到的错误?
- javascript - 在 FireStore 中查询空字段
- java - Glassfish4:由于war文件中WEB-INF/lib/jackson-*.jar中的Java9 module-info.class而出现异常?
- python - Tensorboard 仅显示嵌入层的 8 个节点
- python - 你如何使用从`ImageFont.getmask`返回的`Image.core`?
- .net - 从当前正在构建的程序集中检索使用 GenericTypeParameterBuilder 类型的函数(委托)类型
- arrays - 创建一个函数,在数组中查找基于 Lat long 的最近对象