我正在尝试解码由我的asp.net核心api生成的Jwt这是我用来解码我的jwt的代码
var handler = new JwtSecurityTokenHandler();
var tokenS = handler.ReadJwtToken(jwt);
return tokenS;
这在服务器中有效。没问题。但是,如果我尝试在Blazor client_side中使用同一段代码,则会出现此错误。
blazor.webassembly.js:1 WASM:System.ArgumentException:IDX12723:无法解码有效载荷'[PII被隐藏。有关更多详细信息,请参见https://aka.ms/IdentityModel/PII.]'作为Base64Url编码的字符串。 jwtEncodedString:'[PII被隐藏。有关更多详细信息,请参见https://aka.ms/IdentityModel/PII.]。 ---> Newtonsoft.Json.JsonSerializationException:无法找到用于类型System.IdentityModel.Tokens.Jwt.JwtPayload的默认构造函数。路径'unique_name',第1行,位置15。
这是jwt令牌即时通讯正在使用并尝试解码
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjA4ZDdjYzE5LWY2OTgtYTRlOS05ODcxLWE2ZWM1ODg1OTRhZCIsInJvbGUiOiJBZG1pbiIsImdpdmVuX25hbWUiOiJvY2xpY2swMjEiLCJuYmYiOjE1ODQ4MjM0MTYsImV4cCI6MTU4NDgyMzcxNiwiaWF0IjoxNTg0ODIzNDE2fQ.nD3YzBu1qvNelDz2WHcMSGcKkTtTHX98baNTBXeu12M
对以后遇到此问题的任何人都可以。请不要像我一样,先阅读错误。因此,有关更多详细信息,我打开了PII。只需将这行代码放在引起错误的行之前。
IdentityModelEventSource.ShowPII = true;
现在我可以看到我的问题的更详细的信息,这是打开我的PII后的错误
Newtonsoft.Json.JsonSerializationException:无法找到默认值类型System.IdentityModel.Tokens.Jwt.JwtPayload使用的构造方法
经过一些搜索之后,这是我的解决方法
在builder.Build()之后将这行代码放入Program.cs中;像这样
var host = builder.Build();
_ = new JwtPayload();
BOOM错误消失了,您可以反序列化jwt并制作很棒的东西。