.NET 6.0 WebAPI 使用JWT生成Token的验证授权

1.引入相关程序包JwtBearer注意版本:

2.配置文件appsettings.json写相关配置参数(也可不写,写在程序里面,数据库读取也是一样的)

, //JWT加密
  "JWTToken": {
    "SecretKey": "jsaduwqe6asdjewejdue7dfmsdfu0sdfmwmsd8wfsd6", //密钥
    "Issuer": "ZYP", //发行者
    "Audience": "simple", //拥护者
    //"ExpireMinutes": 240 //过期时间
  }

3.在Program配置相关服务。

#region JWT
//获取配置文件
var configuration = builder.Configuration;
string Issuer = configuration["JWTToken:Issuer"];
string Audience = configuration["JWTToken:Audience"];
string SecretKey = configuration["JWTToken:SecretKey"];
//注入jwt
builder.Services.AddAuthentication(options =>
{
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters()
    {
        //过期时间容错值,解决服务器端时间不同步问题(秒)
        //允许服务器时间偏移量30秒,即我们配置的过期时间加上这个允许偏移的时间值,才是真正过期的时间(过期时间 + 偏移值)你也可以设置为0,ClockSkew = TimeSpan.Zero
        ClockSkew = TimeSpan.FromSeconds(30),
        //要求Token的Claims中必须包含Expires
        RequireExpirationTime = true,
        //是否在令牌期间验证签发者
        ValidateIssuer = true,
        //发行人Issuer
        ValidIssuer = Issuer, 
        //是否验证接收者
        ValidateAudience = true,
        //是否验证失效时间
        ValidateLifetime = true,
        //是否验证签名SecurityKey
        ValidateIssuerSigningKey = true,
        //接收者
        ValidAudience = Audience,
        //密钥SecurityKey
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(SecretKey)), 
    };
});
//注入JwtHelper
builder.Services.AddSingleton(new JwtHelper(configuration));
#endregion

//注入Swagger,注入这个才能在调试接口时输入token
builder.Services.AddSwaggerGen(options =>
{
    options.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference=new OpenApiReference{Id="Bearer",Type=ReferenceType.SecurityScheme},
            },
            Array.Empty<string>()
        }
    });

    options.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
    {
        Description = "请输入文字'Bearer '后面跟空格和token格式  Bearer {token}",
        Name = "Authorization",
        In = Microsoft.OpenApi.Models.ParameterLocation.Header,
        Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey
    });
});

//配置跨域
builder.Services.AddCors(policy =>
{
    policy.AddPolicy("CorsPolicy", opt => opt
    .AllowAnyOrigin()
    .AllowAnyHeader()
    .AllowAnyMethod()
    .WithExposedHeaders("X-Pagination"));
});

//调用中间件:UseAuthentication(认证),
//必须在所有需要身份认证的中间件前调用,比如 UseAuthorization(授权)。
app.UseAuthentication();
//调用中间件:UseAuthorization(授权)。
app.UseAuthorization();

4.相关配置结束后,我们得生成Token,这时我们创建一个专门生成Token的类里面有两个生成Token的方法,想用哪个用哪个。该类在Program里有引用。

 /// <summary>
 /// Token生成类
 /// </summary>
 public class JwtHelper
 {
     /// <summary>
     /// 配置文件信息
     /// </summary>
     private readonly IConfiguration _configuration;
     public JwtHelper(IConfiguration configuration)
     {
         _configuration = configuration;
     }

     /// <summary>
     /// 创建一个使用控制器方法授权的Token
     /// </summary>
     /// <returns></returns>
     public string CreatePermissionToken(string UserName, string RoleName, string AppId, Claim[] claims)
     {
         // 1. 定义需要使用到的Claims
         if (claims == null)
         {
             claims = new[]
             {
               
### 回答1: b'.net6.0 webapi jwt认证'是指使用jwt来对.net6.0 webapi进行认证。jwt即JSON Web Token,是一种用于身份验证授权的开放标准。通过使用jwt,我们可以在客户端与服务器之间进行安全的数据传输,同时保证数据的完整性和安全性。在.net6.0 webapi使用jwt认证,可以有效防止未经授权的访问和攻击。 ### 回答2: 随着互联网技术的不断发展和普及,越来越多的企业和应用程序开始采用WebAPI服务来提供各种不同的功能和服务。随着数据和信息的不断增长,对于WebAPI的安全性和访问控制也变得越来越重要。这正是JWT(Json Web Token)认证的作用所在,它能够让开发者通过在网络上进行点对点的验证来保证信息的安全性。 在.NET 6.0 WebAPI中,JTW验证是一个非常重要的功能,并且可以非常方便地进行集成。它允许通过对包含用户信息的令牌进行签名和加密来进行验证。开发人员只需要在Web API的配置文件(如Startup.cs)中添加验证中间件,并在控制器方法上添加[Authorize]注释。 以下是一个.NET 6.0 WebAPI JTW验证的示例代码: 1.在Startup.cs中添加JTW验证中间件 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Issuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["Jwt:Key"])) }; }); 2.在Controller的Action中添加[Authorize]注释 [Authorize] [HttpGet] public async Task<IActionResult> Get() { // handle the request } 实现JTW验证对于WebAPI的安全性和稳定性来说都是非常重要的。.NET 6.0 WebAPI的特性和框架支持让JTW验证变得更加容易和便捷,同时还能够提供高效和可靠的API服务。 ### 回答3: 前言 随着移动互联网的快速发展和普及,用户对互联网产品和服务的需求不断增长,而其中的数据安全问题也愈加突出。为了解决这一问题,许多网站和应用都开始采用JWT(JSON Web Token)来加强对接口的认证和授权。 在.NET 6.0中,WebAPI提供了方便的JWT验证机制,开发人员只需要使用一些简洁的代码,就能快速实现对应用程序的用户验证授权管理。 如何使用JWT验证 首先,我们需要在.NET 6.0 WebAPI中注册JWT验证服务,以此来实现对用户请求的认证和授权管理。具体的流程如下: 1. 在应用应用程序启动时,向容器注册JWT认证服务 首先通过 NuGet 安装 Microsoft.AspNetCore.Authentication.JwtBearer 包,然后在 Startup.cs 的 ConfigureServices 方法中添加以下代码: services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "Issuer", ValidAudience = "Audience", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; }); 2. 在相应的 API 控制器或操作方法中应用 JWT 验证 然后可以在某些API控制器或操作方法上使用Authorize标记,来启用JWT验证。以下是一个使用Authorize标记的示例: [Authorize] [HttpGet] public async Task<IActionResult> GetUserInfo() { var user = await _userManager.GetUserAsync(User); return Ok(user); } 这些API控制器或操作方法,只有在用户已经成功通过JWT验证后,才会返回数据。否则,用户会收到HTTP 401 Unauthorized 的响应。 3.生成一个JSONWebToken 在用户登录或注册成功后,Web API 服务端需要生成一个 JSONWebTokenJWT)并将其返回给客户端。 下面的示例展示如何使用 SymmetricSecurityKey 和 TokenValidationParameters 来建立 JWT: private async Task<string> GenerateJWTToken(User user) { var jwtSettings = Configuration.GetSection("Jwt"); var key = Encoding.UTF8.GetBytes(jwtSettings["Key"]); var issuer = jwtSettings["Issuer"]; var audience = jwtSettings["Audience"]; var expirationTime = int.Parse(jwtSettings["ExpirationTime"]); var credentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256); var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, user.UserName), new Claim(JwtRegisteredClaimNames.Email, user.Email), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()), new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()) }; var tokenDescriptor = new JwtSecurityToken( issuer: issuer, audience: audience, claims: claims, expires: DateTime.UtcNow.AddMinutes(expirationTime), signingCredentials: credentials ); var tokenHandler = new JwtSecurityTokenHandler(); var encodedToken = tokenHandler.WriteToken(tokenDescriptor); return encodedToken; } 经过以上的代码实现,已经在.NET 6.0 WebAPI中实现了基于JWT的用户认证和授权,使得开发人员能够快速、简单地实现用户数据的保护和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

曾弟弟

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值