Asp.net core 的JWT 中间件

文章介绍了如何在ASP.NETCore应用中添加JWT中间件,用于验证请求中的JWT令牌并提取用户ID。中间件会检查Authorization头,验证令牌,并在请求上下文中存储用户ID,以便后续处理。
摘要由CSDN通过智能技术生成

假设您已经编写了JWT中间件的代码,您可以将其添加到Startup类中的Configure方法中,如下所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 添加JWT中间件
    app.UseJwtMiddleware();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

其中,UseJwtMiddleware是您的中间件方法名称,该方法应该扩展IApplicationBuilder接口并添加中间件的相关操作。将此方法添加到Configure方法后,请求处理管道将包含JWT中间件,并在处理请求时执行相关逻辑。

请注意,根据您的JWT中间件的具体实现和用法,UseJwtMiddleware方法的实现可能会有所不同。下面是一个示例,假设您正在使用ASP.NET Core自带的JWT授权:

public static class JwtMiddlewareExtensions
{
    public static IApplicationBuilder UseJwtMiddleware(this IApplicationBuilder builder)
    {
        return builder.Use(async (context, next) =>
        {
            if (!context.Request.Headers.ContainsKey("Authorization"))
            {
                context.Response.StatusCode = 401;
                return;
            }

            var authHeader = context.Request.Headers["Authorization"][0];
            var token = authHeader.Split(' ')[1];

            var tokenHandler = new JwtSecurityTokenHandler();
            var jwtSettings = new JwtSettings();
            var key = Encoding.ASCII.GetBytes(jwtSettings.SecretKey);

            try
            {
                tokenHandler.ValidateToken(token, new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false,
                    ValidateAudience = false,
                    ClockSkew = TimeSpan.Zero
                }, out SecurityToken validatedToken);

                var jwtToken = (JwtSecurityToken)validatedToken;
                var userId = jwtToken.Claims.First(x => x.Type == "sub").Value;

                // 将用户ID添加到请求上下文中,以供后续中间件或控制器使用
                context.Items["UserId"] = userId;
            }
            catch (Exception)
            {
                context.Response.StatusCode = 401;
                return;
            }

            await next();
        });
    }
}

此示例中间件将检查HTTP请求的Authorization标头中是否包含JWT令牌,如果存在,则从中提取并验证令牌,然后将用户ID添加到请求上下文中。在后续中间件或控制器中,可以通过获取请求上下文的Items字典来获取用户ID。请注意,这只是一个示例实现,您需要根据自己的需求和JWT实现进行修改。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田猿笔记

写文章不容易,希望大家小小打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值