.net 6 使用JWT自动登录

JWT端

1.新建webapi项目,建议在IIS单独开个端口,以便多个系统调用
2.NuGet包安装System.IdentityModel.Tokens.Jwt

3.appsettings.json添加系统对应秘钥并配置读取接口(放哪看个人喜好)

4.编写生成token接口
[HttpGet("GetToken")]
        public string GetToken(string data)
        {
            JObject obj = JObject.Parse(data.ToString());
            string staffCode = obj["userCode"].ToString();
            string systemName = obj["systemName"].ToString();
            string systemKey = config.GetSection($"Key:{systemName}").Value;

            if (string.IsNullOrEmpty(systemKey))
            {
                return "";
            }
            //存放token中的数据
            var claims = new Claim[]
               {
                new Claim("userCode", staffCode),
               };
            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(systemKey));

            var token = new JwtSecurityToken
                (
                    //issuer: "http://localhost:6060",  // jwt服务器地址
                    //audience: "http://localhost:5000",  //请求token的服务器地址
                    claims: claims, 
                    notBefore: DateTime.Now,
                    expires: DateTime.Now.AddHours(12), //超期时间
                    signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256) //加密算法
                );
            try
            {
                return new JwtSecurityTokenHandler().WriteToken(token);
            }
            catch (Exception ex)
            {
                return "";
            }
        }

别忘了配置跨域

项目代码中使用JWT鉴权认证

1.nuget安装Microsoft.AspNetCore.Authentication.JwtBearer

注意版本号对应你的.net版本

2.添加依赖注入

    public static class AddServiceCollectioncs
    {
        public static IServiceCollection AddJwtCollectioncs(this IServiceCollection services)
        {
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                      .AddJwtBearer(options =>
                      {
                          options.TokenValidationParameters = new TokenValidationParameters
                          {
                              ValidateIssuerSigningKey = true,  //开启验证token
//秘钥,需要和JWT端保持一致
                              IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Config.tokenSettings.Key)),
                              ValidateIssuer = false,  //开启验证jwt服务器地址
                              //ValidIssuer = "http://localhost:6060",  //验证jwt服务器地址
                              ValidateAudience = false, //开启验证请求token的服务器地址
                              //ValidAudience = "http://localhost:5000",//验证请求token的服务器地址
                              ValidateLifetime = true, //允许验证时间误差
                              ClockSkew = TimeSpan.Zero
                          };
                      });

            return services;
        }
    }

Program.cs文件中添加

builder.Services.AddJwtCollectioncs();

app.UseAuthentication();

app.UseAuthorization();

3.Swagger中配置jwt认证功能(可忽略)

   c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.ApiKey,
        Description = "格式:Bearer {token}",
        Name = "Authorization",
        BearerFormat = "JWT",
        Scheme = "Bearer"
    });
    c.AddSecurityRequirement(new OpenApiSecurityRequirement
        {
          {
            new OpenApiSecurityScheme
            {
              Reference=new OpenApiReference
              {
                Type=ReferenceType.SecurityScheme,
                Id="Bearer"
              }
            },
            new string[] {}
          }
        });

到此后端配置完成,在需要认证的接口上加 [Authorize]就可以使用了,认证不通过会返回401,例如

前端在请求头中加入token,注意格式Bearer (空格) token

headers:{"Authorization":"Bearer eyJhbGciOiJ****************************"}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值