.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架
作者:csframework|C/S框架网  发布日期:2024/10/22 00:07:27

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token

接口认证方式:Bearer Token

一,前言:

因为HTTP协议是开放的,可以任人调用。所以,本次项目接口是不希望被随意调用,就做了访问权限的控制,认证是好的用户,才允许调用API。

二,测试接口:

如果要测试接口,首先要进行登录,登录成功会有个token信息,向api接口发送请求的时候必须带上这个token。

三,注意点:

token一般有时间限制。token期限(开发版本2小时,上线版本7天),token过期将会返回20001状态码。

四,其他事项:

  • 用户登录成功将会返回一个token,该token在其后的每次请求中都必须携带,否则将视为无权访问。
  • token具有过期时限,如果token过期,即代表用户需要重新重录,获取新的token。
  • token必须使用 Bearer Token(Token 令牌) 方式,使用该方式头部会多一个 authorization。
  • token即将过期时,系统将返回新的token,请获取响应 header 里面的X-Token进行替换。
  • token将设置黑名单,如用户退出,或即将过期的token将会进入黑名单,即无效token

Swagger 使用 Bearer Token

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

Authorize 授权 (设置token值)

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

授权成功,点Close关闭窗体

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

测试接口

点【Try it out】按钮:

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

点【Execute】按钮:

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

返回数据成功:

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

模拟登出

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

CSFramework.WebApi 框架 Bearer Token/Jwt Token 应用

版本:CSFramework.WebApiV3.0(.NET8/NETCore版)

WebApi服务端配置JWT Token认证

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

文件名:JwtExtentions

逻辑:启动WebApi服务,设置WebApi授权模式,使用JWT Token认证。

C# 全选
Console.WriteLine("Config Jwt...");
services.AddJwtBearer(_Configuration, "jwt");

C# 全选
        public static IServiceCollection AddJwtBearer(this IServiceCollection services, IConfiguration configuration, string sectionName)
        {
            //获取jwt参数配置
            services.Configure<JwtOptions>(configuration.GetSection(sectionName));
            var myOptions = configuration.GetSection(sectionName).Get<JwtOptions>();

            //设置授权模式
            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;//Bearer模式
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                JwtHelper.ConfigJwt(x, myOptions);               
            });

            return services;
        }

WebApi 服务端写入 Bearer Token/Jwt Token 值

.NET8 WebApi框架接口认证方式:Bearer Token/Jwt Token详解|C/S开发框架

文件名:JwtHelper.cs

逻辑:用户登录成功,授权服务器写入token值。

C# 全选
        public static string WriteJwtToken(JwtOptions options, JwtClaimData claim)
        {
            var claims = new[]
             {
               //new Claim(ClaimTypes.Name, claim.UserId??"") ,
               new Claim("userId", claim.UserId??"") ,
               new Claim("userName" , claim.UserName??"") ,
               new Claim("publicKey" , claim.PublicKey??"") ,
               new Claim("appId" , claim.AppId??"") ,
               new Claim("language" , claim.Language??"") ,
               new Claim("dbid" , claim.DBID??"") ,
               new Claim("phone" , claim.Phone??"") ,
            };

            var key = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(options.Secret));
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var jwtToken = new JwtSecurityToken(
                issuer: options.Issuer,
                audience: options.Audience,
                notBefore: DateTime.Now,
                expires: DateTime.Now.AddHours(options.AccessExpireHours),
                claims: claims,
                signingCredentials: credentials);

            //生成token字符串
            var token = new JwtSecurityTokenHandler().WriteToken(jwtToken);
            return token;
        }

客户端调用

C# 全选
 using HttpClient httpClient = new HttpClient();
 httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", bearerToken);

C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
上一篇 下一篇