在基于 .Net 4.0 的应用程序中解码 JWT 令牌

Posted

技术标签:

【中文标题】在基于 .Net 4.0 的应用程序中解码 JWT 令牌【英文标题】:Decode JWT tokens in .Net 4.0 based Application 【发布时间】:2019-05-04 17:09:29 【问题描述】:

我正在开发一个基于 .Net 4.0 框架并实现 ASP.NET Web API 的项目。我的要求是解码进入 API 的 JWT 令牌。我正在探索“使用 System.IdentityModel.Tokens.JWT”,但似乎这仅与 .Net 4.5 兼容。如何在我的基于 .Net framework 4.0 的项目中访问 JWT 函数?

【问题讨论】:

你已经尝试过什么? *** 不是一个供人们为您编写代码的网站,请阅读此***.com/help/mcve 并编辑您的问题,因为我知道我将其标记为“太宽泛”。话虽如此,我在使用多个 .NET 库(甚至是 Microsoft 支持的一个)快速谷歌搜索 jwt.io 后发现了这一点 你有这方面的最新消息吗? 这是一个很合理的问题。我也试图找到.NET 4(不是 4.5)的 lib 支持 @MindSwipe 这个问题很有道理。不要以为你自己也遇到过这个问题。您的评论是没有帮助的。 【参考方案1】:

经过反复试验,我发现 jose-jwt 支持 .NET4

【讨论】:

不幸的是,虽然我确实发现它支持 .NET 4,但我走了另一条路,所以没有代码可以显示。【参考方案2】:

我正在处理一个 .net 4 项目,发现 JWT-Dotnet 很有帮助。这是docs。 可以使用 nuget 轻松安装。 NUGET的详细信息可以找到here

Install-Package JWT -Version 7.3.1

从 3.5 开始支持 .net。解码令牌非常简单。以下是文档中的示例。

const string token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjbGFpbTEiOjAsImNsYWltMiI6ImNsYWltMi12YWx1ZSJ9.8pwBI_HtXqI3UgQHQ_rDRnSQRxFL1SR8fbQoS-5kM5s";
const string secret = "GQDstcKsx0NHjPOuXOYg5MbeJ1XT0uFiwDVvVBrk";

try

    IJsonSerializer serializer = new JsonNetSerializer();
    var provider = new UtcDateTimeProvider();
    IJwtValidator validator = new JwtValidator(serializer, provider);
    IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
    IJwtAlgorithm algorithm = new HMACSHA256Algorithm(); // symmetric
    IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder, algorithm);
    
    var json = decoder.Decode(token, secret, verify: true);
    Console.WriteLine(json);

catch (TokenExpiredException)

    Console.WriteLine("Token has expired");

catch (SignatureVerificationException)

    Console.WriteLine("Token has invalid signature");

【讨论】:

以上是关于在基于 .Net 4.0 的应用程序中解码 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

JWT 令牌解码

JWT在线解码网址和结构介绍

JWT 在 jwt.io 上解码,但不在应用程序中

JWT在jwt.io上解码,但在应用程序中没有

Asp.net 核心中的会话和应用程序变量,以防我们使用 JWT 令牌(因此没有基于 cookie 的会话)

具有 [Authorize] 属性的 JWT 身份验证