如何在 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.token
和keycloak.parsedToken
。第二个给你令牌的对象模型。以上是关于如何在 ASP.NET Core 中转储解析的 JWT 令牌?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.net Core Web Api 中默认使用 Newtonsoft.Json?
在 ASP.NET Core Web API 中一起接收文件和其他表单数据(基于边界的请求解析)