【发布时间】:2021-11-20 12:45:21
【问题描述】:
我有一个 JWT,我想使用 Microsoft.IdentityModel.Tokens 包中的 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler 类对其进行解码。我可以毫无问题地解码所有标准声明。
但是,我在 JWT 中有一个自定义声明,如下所示:
{
"exp": 1632825287,
...
"my_custom_claim": {
"ctx": "...",
"act": "a826e63f-1c31-4f01-b432-f1264794e7ac"
}
}
我使用以下代码:
var jwtTokenHandler = new JwtSecurityTokenHandler();
var decodedJwtToken = jwtTokenHandler.ReadJwtToken(encodedJwtToken);
object customClaim = decodedJwtToken.Payload["my_custom_claim"];
// customClaim is wrapped as object, the underlying type is Microsoft.IdentityModel.Json.Linq.JObject
我的问题是:如何解码/访问“my_custom_claim”中包含的“act”子声明的值?
因为Microsoft.IdentityModel.Json 命名空间中的所有类型都是内部的,所以我没有机会对其进行解码。
【问题讨论】:
-
var act = decodedJwtToken.Payload["my_custom_claim"]["act"]? -
这不起作用,因为
decodedJwtToken.Payload["my_custom_claim"]是对象类型。它抛出“错误 CS0021:无法使用 [] 将索引应用于‘object’类型的表达式”。