带有 API 密钥和 JWT 令牌的 Net Core API
Posted
技术标签:
【中文标题】带有 API 密钥和 JWT 令牌的 Net Core API【英文标题】:Net Core API with API Key and JWT token 【发布时间】:2020-09-15 04:34:45 【问题描述】:我有一个 .Net Core API,其中一些端点需要 JWT 授权,而其他端点需要 API 密钥授权。在 startup.cs 中配置 JWT 身份验证后,我在需要 JWT 令牌的方法上使用 Authorize 时为 API Key 方法实现一个属性。我在正确的轨道上吗?我是 .Net Core 和 API 的新手,感谢任何帮助。
【问题讨论】:
显示一些代码? 【参考方案1】:是的,没错,如你所知启动类配置应用的请求管道以及所有请求的处理方式
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using WebApi.Helpers;
using WebApi.Services;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using Microsoft.AspNetCore.Authentication.JwtBearer;
namespace WebApi
public class Startup
public Startup(IConfiguration configuration)
Configuration = configuration;
public IConfiguration Configuration get;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
services.AddCors();
services.AddControllers();
// configure strongly typed settings objects
var appSettingsSection = Configuration.GetSection("AppSettings");
services.Configure<AppSettings>(appSettingsSection);
// configure jwt authentication
var appSettings = appSettingsSection.Get<AppSettings>();
var key = Encoding.ASCII.GetBytes(appSettings.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
;
);
// configure DI for application services
services.AddScoped<IUserService, UserService>();
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
app.UseRouting();
// global cors policy
app.UseCors(x => x
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
【讨论】:
谢谢@hesam akbari。这基本上就是我在 startup.cs 中的内容。我对需要 JWT 令牌的方法使用 Authorize 属性,对需要 API 密钥的方法使用 API 密钥过滤器。但是,当我大摇大摆地测试它时,需要 JWT 的仍然要求提供 API 密钥。也许这是我招摇的设置?以上是关于带有 API 密钥和 JWT 令牌的 Net Core API的主要内容,如果未能解决你的问题,请参考以下文章
.Net Core 自定义身份验证使用 API 密钥和 Identity Server 4
使用密钥大小小于2048的RSA安全密钥创建JWT令牌时出错
NET Core 3.1 MVC 授权/身份验证,带有在单独的 Net Core 3.1 Web Api 中从外部获取的令牌 (JWT)