如何在 .NET 3.5 中使用 System.IdentityModel.Tokens.Jwt 5.2.1?

Posted

技术标签:

【中文标题】如何在 .NET 3.5 中使用 System.IdentityModel.Tokens.Jwt 5.2.1?【英文标题】:How to use System.IdentityModel.Tokens.Jwt 5.2.1 in .NET 3.5? 【发布时间】:2018-10-03 05:43:09 【问题描述】:

我有一个项目,我想从请求中验证令牌。我项目的 .NETFramework 版本是 3.5。我正在尝试在我的项目中使用以下代码和这些代码,我已在另一个项目中使用来验证 .NETFramework 版本为 4.5.2 的令牌。

using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TokenValidator

    public class TokenValidator
    
        public static bool IsTokenValid(string token, string secretKey)
        
            string tokenPGID;
            JwtSecurityToken validatedToken;

            try
            
                validatedToken = ValidateToken(token, secretKey) as JwtSecurityToken;

                return true;
            
            catch (Exception)
            
                return false;
            
        

        private static SecurityToken ValidateToken(string token, string secretKey)
        
            var handler = new JwtSecurityTokenHandler();
            var tokenS = handler.ReadToken(token) as JwtSecurityToken;
            TokenValidationParameters tokenValidationParameters = new TokenValidationParameters
            
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)),
                RequireExpirationTime = true,
                ValidateLifetime = true,
                ValidateAudience = false,
                ValidateActor = false,
                ValidateIssuer = false
            ;
            SecurityToken securityToken = new JwtSecurityToken();
            handler.ValidateToken(token, tokenValidationParameters, out securityToken);

            return securityToken;
        
    

但是,我的项目出现以下错误:

错误无法安装包'System.IdentityModel.Tokens.Jwt 5.2.1'。您正在尝试将此包安装到以“.NETFramework,Version=v3.5”为目标的项目中,但该包不包含 任何与其兼容的程序集引用或内容文件 框架。如需更多信息,请联系包作者。

有没有办法在 .NETFramework 3.5 的项目中验证 JWT 令牌意味着我应该使用哪个版本的包来兼容 .NET 3.5?

还有其他方法可以在 .NET 3.5 中验证 JWT 令牌吗?

【问题讨论】:

System.IdentityModel.Tokens.Jwt version >= 5.0 depend on .NET Framework >= 4.5。尝试较低的版本,例如 4.4。 4.4 不工作。我尝试使用 NuGet 安装该软件包 【参考方案1】:

我查看了@NicoPaez 建议的 Auth0 库,但它已被弃用:

建议用户切换到此库所基于的 JWT.NET 尽快。

能够轻松地将 JWT.NET 库转储到我的代码中,这是旧的 .Net Framework 3.5 东西。

https://www.nuget.org/packages/JWT

【讨论】:

【参考方案2】:

我认为 Microsoft 官方不支持为 .Net 3.5 生成 JWT,但您可以使用第三方库,例如 Auth0 开发的库:https://libraries.io/github/auth0/jwt

【讨论】:

【参考方案3】:

在我的项目中,我使用 netcoreapp3.0,为了安装 System.IdentityModel.Tokens.Jwt,我做了以下步骤:

1) Install-Package System.IdentityModel.Tokens.Jwt -Version 4.0.4.402070948

2) See there a new version 然后更新包 安装包 System.IdentityModel.Tokens.Jwt -Version 5.5.0 然后包 Microsoft.IdentityModel.TokensSystem.IdentityModel.Tokens.Jwt 将可用。

【讨论】:

以上是关于如何在 .NET 3.5 中使用 System.IdentityModel.Tokens.Jwt 5.2.1?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在 ASP.NET 3.5 中动态设置“application/ld+json”Schema.org 元数据

如何在 VS2010 中使用 asp.net 重新配置和编译网站到 Framework 3.5?

如何在 c# .net CF 3.5 中使用 XmlDocument 向 xml 添加属性

如何使用 .NET 3.5 从 XML 文件中读取处理指令

我可以在 .Net 3.5 项目中使用任务并行库吗?

如何将托管 c++ 库导入 C# 应用程序(目标 .net 版本 3.5)