尝试解码从自己的后端 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();
我开始不明白问题出在哪里,但很高兴现在一切都按预期进行。
我有一个带有 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();
我开始不明白问题出在哪里,但很高兴现在一切都按预期进行。