如何在 ASP.NET Core 中转储解析的 JWT 令牌?

Posted

技术标签:

【中文标题】如何在 ASP.NET Core 中转储解析的 JWT 令牌?【英文标题】:How to dump parsed JWT token in ASP.NET Core? 【发布时间】:2021-10-13 21:15:35 【问题描述】:

我正在 .NET Core 中编写一个 API,用于解析由 Keycloak 颁发的 JWT 令牌。

这个令牌非常多样化。自定义 cliam 具有不同类型的数据格式和嵌套。

为此,我使用Microsoft.AspNetCore.Authentication.JwtBearer 作为 NuGet 依赖项,并且我希望使用以下控制器来转储传入的令牌:

[HttpGet]
public object Dump(string token)

   // token is what I have taken from the `Authorizaiton: Bearer token` HTTP header
   // How can I find out how .NET parses this token? I want the object model. I want the parsed token here.

我怎样才能得到这个?

【问题讨论】:

您能分享一下token 值的样子吗? JWT 令牌是一个字符串,你可以用. 分割它。第一部分是标头,第二部分是有效负载,第三部分是签名......您可以进一步 base64 解码的各个部分,这将为您提供 JSON 字符串,您可以存储或反序列化到相应的类对象。 【参考方案1】:

使用JwtSecurityTokenHandler 类的ValidateToken 方法,该方法返回包含令牌声明的ClaimsPrincipal

【讨论】:

我查看了那个方法,它需要一堆参数。我已经配置 .NET 来解析这个令牌。我想要的是查看解析后的模型并将其转储到日志文件中。 例如,User.Identity.IsAuthenticated 根据令牌的有效性返回 true 或 false。我想要HttpContext.ParsedToken 之类的东西。 Keycloak 有keycloak.js,它有两个属性:keycloak.tokenkeycloak.parsedToken。第二个给你令牌的对象模型。

以上是关于如何在 ASP.NET Core 中转储解析的 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?

在 ASP.NET Core Web API 中一起接收文件和其他表单数据(基于边界的请求解析)

[Asp.Net Core]C#解析Markdown文档

[Asp.Net Core]C#解析Markdown文档

更改 ASP.NET Core 中 DateTime 解析的默认格式

ASP.NET Core Web API使用静态swagger.json文件