尝试解码从自己的后端 API 返回的 JSON Web 令牌时出错 -

Error when attempting to decode JSON Web Token returned from own backend API -

我有一个带有 ASP.Net Core Web API 后端的 Blazor WebAssembly 应用程序。

该应用程序使用 JSON Web 令牌,由后端创建并返回 API 作为用户成功验证的一部分。

JWT 返回浏览器后出现问题,Blazor 正在尝试解码令牌的内容。

在我的开发环境中,这工作得很好,并解码了令牌中的所有编码信息。

但是,当尝试 运行 Web 服务器上的 API 和 Blazor Webassembly 前端时,在尝试解码令牌时会生成以下异常:

EXCEPTION: IDX12729: Unable to decode the header 'System.String' as Base64Url encoded string. jwtEncodedString: 'System.String'

异常由以下代码产生:

var jwtHandler = new JwtSecurityTokenHandler();

var jwtToken = jwtHandler.ReadJwtToken(jwtTokenString);

System.IdentityModel.Tokens.Jwt, Version=6.8.0.0

实际令牌如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1lIjoiam9obmRvZSIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWVpZGVudGlmaWVyIjoiZTUwZjZhYmUtYjcyYi00MWI2LWIwYTctMGE3Y2M0OGYwZWYzIiwiZ2l2ZW5fbmFtZSI6IkpvaG4iLCJmYW1pbHlfbmFtZSI6IkRvZSIsImVtYWlsIjoiam9obkBkb2UuY29tIiwiYXV0aF90aW1lIjoiMDcvMDMvMjAyMSAyMTo0MTozMCIsImV4cCI6MTYxNTE4OTI5MCwiQ29tcGFueUlkIjoiMSIsIkNvbXBhbnlOYW1lIjoiSkQgQ28gUExDIiwiT3JnYW5pc2F0aW9uSWQiOiIxIiwiT3JnYW5pc2F0aW9uTmFtZSI6IkpEIE9yZyBQTEMiLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3dzLzIwMDgvMDYvaWRlbnRpdHkvY2xhaW1zL3JvbGUiOlsiQ29tcGFueUFkbWluIiwiR2VuZXJhbFVzZXIiLCJHbG9iYWxBZG1pbiIsIk9yZ2FuaXNhdGlvbkFkbWluIiwiT3JnYW5pc2F0aW9uQmlsbGluZyJdLCJpc3MiOiJKb2huRG9lQXBpIiwiYXVkIjoiaHR0cHM6Ly9qb2huZG9lLmNvbSJ9.klbdvnjikSbnjr8q_7d4vxMsxajPJ3nY3yiDevJCdHo

我已经验证了令牌(通过 https://devtoolzone.com/decoder/jwt )并且一切正常。

任何人都可以提供任何指导吗?

在进一步调查中,有一个我没有发现的内部异常:

Unable to find a default constructor to use for type System.IdentityModel.Tokens.Jwt.JwtHeader

这让我想到了 Github 上的这个已知问题:https://github.com/mono/linker/issues/870

总而言之,有一个解决方法,在 program.cs 中的 builder.Build() 之后包含以下代码:

_ = new JwtHeader();
_ = new JwtPayload();

我开始不明白问题出在哪里,但很高兴现在一切都按预期进行。