解码JWT.IO令牌

时间:2018-12-19 22:04:34

标签: c# asp.net .net

我有一个JWT令牌,并且我正在尝试解码有效负载。我要解码的字符串是:

eyJzdWIiOiIyMzEzOTE6MTAxMjpFQiBBZG1pbixFQiBDaGVjayBJbi9PdXQgUmVzb3VyY2VzLEVCIE1hc3RlciBBZG1pbiIsImV4cCI6IjE1NDUyNTc2MDkiLCJhdWQiOiI0OTk0QzgxMC02QUMyLTQ3NkYtQjUyQi04MjQ5NUUzRUNBNTgifQ

如果我转到https://www.base64decode.org/并插入该字符串,它将解码为:

{"sub":"231391:1012:EB Admin,EB Check In/Out Resources,EB Master Admin","exp":"1545257466","aud":"4994C810-6AC2-476F-B52B-82495E3ECA58"}

但是,这个:

byte[] dataPayload = Convert.FromBase64String(tokenPayload);

我得到:

  

Base-64 char数组或字符串的长度无效

不确定我做错了什么。

编辑:

这是JWT.IO提供的整个JWT(我添加了换行符,因此更易于阅读)...

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9。 eyJzdWIiOiIyMzEzOTE6MTAxMjpFQiBBZG1pbixFQiBDaGVjayBJbi9PdXQgUmVzb3VyY2VzLEVCIE1hc3RlciBBZG1pbiIsImV4cCI6IjE1NDUyNTc4ODMiLCJhdWQiOiI0OTk0QzgxMC02QUMyLTQ3NkYtQjUyQi04MjQ5NUUzRUNBNTgifQ。 0oaXmDOlYdHSTLo7t7fFpHG2T0DMRpAoERxiM_Ur5O4

同一两行代码运行正常:

string tokenPayload = _jwtData.WebToken.Split('.')[1];
byte[] dataPayload = Convert.FromBase64String(tokenPayload);

但是由于某种原因,我不明白,现在我收到了此错误。

2 个答案:

答案 0 :(得分:1)

您缺少填充。看一下以下内容:https://en.wikipedia.org/wiki/Base64#Output_padding

所以你的情况,正确的JWT令牌是:eyJzdWIiOiIyMzEzOTE6MTAxMjpFQiBBZG1pbixFQiBDaGVjayBJbi9PdXQgUmVzb3VyY2VzLEVCIE1hc3RlciBBZG1pbiIsImV4cCI6IjE1NDUyNTc2MDkiLCJhdWQiOiI0OTk0QzgxMC02QUMyLTQ3NkYtQjUyQi04MjQ5NUUzRUNBNTgifQ ==

答案 1 :(得分:1)

似乎JWT.IO有自己的解码自己的有效负载的方法。这是正确的方法:

string jwt = JWT.Decode("...token...", "...encoded Secret Key...", JwsAlgorithm.HS256);

JWT来自其NuGet软件包的Jose.JWT