.net core添加JWT授权

在startup中ConfigureServices方法内部增加:

services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "swaggerTest", Version = "v1" });

                c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme()
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer { token }\"",
                    Name = "Authorization",
                    In = ParameterLocation.Header,
                    Type = SecuritySchemeType.Http,
                    Scheme="Bearer",
                    BearerFormat = "JWT",
                });
                c.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { 
                        new OpenApiSecurityScheme
                        {
                            Reference=new OpenApiReference()
                            {
                                Id="Bearer",
                                Type=ReferenceType.SecurityScheme
                            }
                        },
                       new string[]{}
                    }
                });
            });
            services.AddAuthentication(option =>
            {
                option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateAudience = true,
                    ValidAudience = "Audience",
                    ValidateIssuer = true,
                    ValidIssuer = "Issuer",

                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SigningKeySigningKeySigningKeySigningKey")),

                    ValidateLifetime = true,
                    // 缓冲过期时间,总的有效时间等于这个时间加上jwt的过期时间,如果不配置,默认是5分钟
                    //ClockSkew = TimeSpan.FromMinutes(1)
                };
            });

在Configure中添加


app.UseAuthorization();中间件

在控制器前面加入[Authorize]

 

 然后去请求接口返回jwt验证信息,返回给前端

[AllowAnonymous]
        [HttpPost("Login")]
        public IActionResult Login(string username,string password)
        {

            var identifier = username.ToString();
            var role = password.ToString();
            var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme);
            identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, "NAME"));
            identity.AddClaim(new Claim(ClaimTypes.Role, "ROLE"));
            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SigningKeySigningKeySigningKeySigningKey"));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Audience = "Audience",
                Issuer = "Issuer",
                Subject = identity,
                Expires = DateTime.Now.AddHours(4),
                SigningCredentials = creds,
            };

            var tokenHandler = new JwtSecurityTokenHandler();
            var token = tokenHandler.CreateToken(tokenDescriptor);
            var tokenRes = tokenHandler.WriteToken(token);
            return Ok(tokenRes);
        }

然后到这里就可以去swagger上去测试jwt验证信息了

 

posted @ 2022-04-21 14:23  薛小谦  阅读(150)  评论(0编辑  收藏  举报