APIKey和JWTToken能否在同一个.Net6WebAPI中使用?
创始人
2024-09-07 21:00:44
0

可以在同一个.Net 6 WebAPI中使用API Key和JWT Token,但需要对API Key和JWT Token进行分别处理。下面是使用API Key和JWT Token的代码示例:

  1. 使用API Key进行身份验证:

在Startup.cs中添加以下代码:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = "APIKeyScheme";
    options.DefaultChallengeScheme = "APIKeyScheme";
}).AddApiKeySupport(options => {});

services.AddAuthorization(options =>
{
    options.AddPolicy("APIKeyPolicy", policy =>
        policy.RequireAuthenticatedUser().Build());
});

app.UseAuthentication();
app.UseAuthorization();

// 自定义中间件处理API Key验证
app.UseMiddleware(Configuration.GetValue("APIKey"));

创建ApiKeyMiddleware.cs文件,添加以下代码:

public class ApiKeyMiddleware
{
    private readonly RequestDelegate _next;
    private readonly string _apiKey;

    public ApiKeyMiddleware(RequestDelegate next, string apiKey)
    {
        _next = next;
        _apiKey = apiKey;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        if (!context.Request.Headers.TryGetValue("Authorization", out var token)
            || token.ToString() != _apiKey)
        {
            context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            await context.Response.WriteAsync("Invalid API Key");
            return;
        }

        await _next(context);
    }
}
  1. 使用JWT Token进行身份验证:

在Startup.cs中添加以下代码:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidIssuer = Configuration["Jwt:Issuer"],
        ValidAudience = Configuration["Jwt:Audience"],
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
    };
});

services.AddAuthorization(options =>
{
    options.AddPolicy("JwtPolicy", policy =>
        policy.RequireAuthenticatedUser().Build());
});

app.UseAuthentication();
app.UseAuthorization();

在Controller的Action中添加[Authorize(Policy = "JwtPolicy")]属性,

相关内容

热门资讯

总算了解!新西楚辅助器,悠闲游... 总算了解!新西楚辅助器,悠闲游戏辅助,发现开挂辅助教程(有挂辅助);无需打开直接搜索打开薇:1367...
科技分享!微信小程序游戏破解微... 科技分享!微信小程序游戏破解微乐游戏,新九哥智能辅助app,原来有开挂辅助教程(真的有挂);无需打开...
玩家必备科技!开心十三水辅助工... 玩家必备科技!开心十三水辅助工具,哥哥打大a辅助,推荐开挂辅助教程(有挂透明挂)1、下载安装好开心十...
玩家必看科普!一起宁德福鼎打炸... 玩家必看科普!一起宁德福鼎打炸辅助,冰球突破豪华版辅助,实测开挂辅助教程(有挂攻略)1、下载安装好一...
今日百科!闲逸透视app免费版... 您好:闲逸透视app免费版在哪里这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很...
每日必看!新上游反杀辅助,微友... 每日必看!新上游反杀辅助,微友三代辅助,了解开挂辅助教程(有挂功能);无需打开直接搜索加(薇:136...
普及知识!天天微友第三方辅助软... 普及知识!天天微友第三方辅助软件下载,金州水鱼脚本,关于开挂辅助教程(有挂教程);无需打开直接搜索薇...
必备辅助推荐!微乐a3纸牌有脚... 必备辅助推荐!微乐a3纸牌有脚本,友友联盟辅助脚本,教会开挂辅助教程(有挂总结)1、下载安装好微乐a...
玩家实测!微乐江西小程序辅助器... 玩家实测!微乐江西小程序辅助器免费,悟空大厅怎么挂辅助,实测开挂辅助教程(有挂头条);无需打开直接搜...
总算了解!方片十三张透视脚本,... 总算了解!方片十三张透视脚本,三哥玩辅助器免费下载,了解开挂辅助教程(今日头条)1、下载安装好三哥玩...