在 Blazore 客户端结果中解码 Jwt WASM: System.ArgumentException: IDX12723: 无法解码有效负载 '[PII 已隐藏

Sae*_*ari 3 .net jwt webassembly blazor blazor-client-side

我正在尝试解码由我的 asp.net core api 生成的 Jwt 这是我用来解码 jwt 的代码

        var handler = new JwtSecurityTokenHandler();
        var tokenS = handler.ReadJwtToken(jwt);
        return tokenS;
Run Code Online (Sandbox Code Playgroud)

这在服务器中有效。没问题。但是,如果我尝试在 Blazor client_side 中使用相同的代码,则会收到此错误。

blazor.web assembly.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.eyJ1bmlxdWVfbmFtZSI6IjA4ZDdjYzE5LWY2OTgtYTRLOS05ODcxLWE2ZWM1ODg1OTRhZCIsInJvbGUIOiJBZG1pbiIsImdpdmVuX25hbWUiOi JvY2xpY2swMjEiLCJuYmYiOjE1ODQ4MjM0MTYsImV4cCI6MTU4NDgyMzcxNiwiaWF0IjoxNTg0ODIzNDE2fQ.nD3YzBu1qvNelDz2WHcMSGckkTtTHX98baNTBXeu12M

Sae*_*ari 7

对于以后遇到此问题的任何人都可以。请不要像我一样先阅读错误。因此,为了了解更多详细信息,我打开了 PII。只需将此行代码放在导致错误的行之前即可。

   IdentityModelEventSource.ShowPII = true;
Run Code Online (Sandbox Code Playgroud)

现在我可以更详细地看到我的问题,这是打开我的 PII 后出现的错误

Newtonsoft.Json.JsonSerializationException:无法找到用于类型 System.IdentityModel.Tokens.Jwt.JwtPayload 的默认构造函数

经过一番搜索后,这就是我的解决方案

将这行代码放在 Program.cs 中的 builder.Build() 之后;像这样

      var host = builder.Build();
        _ = new JwtPayload();
Run Code Online (Sandbox Code Playgroud)

BOOM 错误消失了,您可以反序列化您的 jwt 并做出很棒的事情。