如何在 .NET Core 3.0 中替换 AddJwtBearer 扩展

Posted

技术标签:

【中文标题】如何在 .NET Core 3.0 中替换 AddJwtBearer 扩展【英文标题】:How to replace AddJwtBearer extension in .NET Core 3.0 【发布时间】:2020-02-23 20:32:12 【问题描述】:

我有以下在 .NET Core 2.2 中编译和工作的代码:

  byte[] key = Encoding.ASCII.GetBytes(Constants.JWT_SECRET); 
        services.AddAuthentication(x =>
        
            x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
        )
        .AddJwtBearer(x =>
        
            x.RequireHttpsMetadata = false;
            x.SaveToken = true;
            x.TokenValidationParameters = new TokenValidationParameters
            
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(key),
                ValidateIssuer = false,
                ValidateAudience = false
            ;
        );

在 .NET Core 3.0 中出现错误:

错误 CS1061 'AuthenticationBuilder' 不包含 'AddJwtBearer' 并且没有可访问的扩展方法 'AddJwtBearer' 接受“AuthenticationBuilder”类型的第一个参数可能是 找到(您是否缺少 using 指令或程序集引用?)

当我查看 MSFT 文档时: https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.jwtbearerextensions.addjwtbearer?view=aspnetcore-2.2

并尝试升级到 3.0 版本,这似乎是定义它的最后一个版本。如何将 AddJwtBearer 迁移到 Core 3.0?

【问题讨论】:

分享你的csproject文件 你解决了这个问题吗?在 .net 5 中它说 AddTokenAuthentication 不存在 使用接受的答案解决了,但那是 .net core 3.0 你可能需要 net 5 的更新版本,我不使用 .net 5 如果您从版本 2.2 转换为 3.0 安装包 Microsoft.AspNetCore.Authentication.JwtBearer -Version 3.0.3 【参考方案1】:

就像 Mert Sayin 所说,包含包 Microsoft.AspNetCore.Authentication.JwtBearer,但使用 版本 3.0.0

【讨论】:

【参考方案2】:

您必须将Microsoft.AspNetCore.Authentication.JwtBearer 包包含到您的项目中。 Core 3.0 及更高版本的版本为 3.0.0。

【讨论】:

您是否在顶部使用了using Microsoft.AspNetCore.Authentication.JwtBearer; 是的,我认为这并不简单,因为 MSFT 文档明确指出 3.0 中不存在此方法。我认为可能有一些方法可以在启动时使用依赖注入来添加 JwtBearer,但我无法在互联网上找到。【参考方案3】:

类似这样的:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options => Configuration.Bind("JwtSettings", options)) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => Configuration.Bind("CookieSettings", options));

从这里: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/?view=aspnetcore-3.1

【讨论】:

以上是关于如何在 .NET Core 3.0 中替换 AddJwtBearer 扩展的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET Core 3.0 SDK 上构建多目标 .NET 5 和 .NET Core 3.1

如何在 .NET Core 3.0 Entity Framework 中执行组加入?

如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?

如何在 Asp.Net Core 3.0 WebAPI 中启用 CORS

.net core 3.0 Signalr - 09 待改进&交流

如何在 .Net Core 3.0 中获得对 MS Access 的引用?